Android编码解码及其原理

本文摘抄至:chendong_  的博客

前言

        本文用到ASCII表,Base64对照表请自行百度。

        概念:编码解码就是使用特定的算法,将数据进行处理,形成数据的另外一种表现形式,编码后的数据可以使用解码算法还原出原始数据。

Base64简介

        Base64算法可以将任意的字节数组数据通过算法生成只有(英文大小写,数字,+,/)共64种字符的字符串数据;相当于将任意内容转换为可见字符串表示。

        也就是将不可见的数据转换为ASCII码数据,便于在Json和Xml中传递。

Base64Api

flag常量

字符串Base64编码过程

        字符串String str = "0Aa";首先,原先每个字符是2个字节16bit,对于英文来说前8个bit是0,也就是只有8个bit,现在是3个字符,3*8=24个bit需要显示。

  转换

        现在拼凑成是这样的二进制串( 001100 000100 000101 100001),将其转化为Base64可以显示的模式,需要每次取6位作为一个Base64字符,前两位补0

二进制数组编码过程

        这个例子已经很清晰的解释了Base64的编码过程,网上有人自己实现了Base64编码的类,Android源码也不难,这是编码字符串看起来还是比较清晰的,我们也可以更本质一点

        byte[] bs = new byte[]{1,10,20};这是一个byte数组,复习一下,1个byte是8个bit,可以表示的范围 0-127之间,我们在调用Base64的函数时,本质也是在操作字节数组,同样的原理

Hex编码简介

         Hex就是16进制,本质上是将字节数组转化为16进制,然后用字符串的形式表现出来,我们知道16进制的取值范围就是在0-f之间,这样就可以将无法显示的字节数组数据显示出来。

        原理方面比起Base64就简单很多了,一个8bit的数据,也就是(xxxx xxxx),每4个bit可以转化为一个16进制表示,也就是8个bit会转化为(00-ff)之间的16进制数字。

Hex编码原理分析

        简单说一下,&运算,两者都为1结果才是1,b>>4&0xf取出高四位,b&0x0f取出低四位,举个例子:

        1、字节是 b = 1010 1111

        2、b>>4 b = 00001010

        3、b>>4&0x0f 也就是 00001010&00001111 —-> 1010高四位取出来了,取得低四位原理一样。后面的操作就是根据数据的大小转换一下格式,因为拿到的数据是十进制的那么范围会在0-15之间,需要转换为16进制的0-f.

Hex解码原理分析

        相当于编码的逆运算,根据字符串每次取两位,转换成int,在进行移位将其拼成一个字节,怎么拼的?v = ((ih&0x0f)<<4)|(il&0x0f);

        这一句,假设我们获得的字符串最后转化结果是10和5,也就是1010,0101。10<<4,结果是10100000,然后10100000 | 0101,|运算只要有1则为1,结果是10100101就完成了拼接工作。

总结

        Base64和Hex是比较常见的编码方式,对比一下,Base64每3个字节转化为4个字节,每个字节浪费2bit,Hex编码,每个字节转化为两个字节,每个字节浪费4bit,所以说Base64更加节省空间,而且用起来简单得多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容