jsbyte[]、hex、base64各种编码转换
1、base64
base64把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位⾼位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要⽐原来的长1/3。
关于这个编码的规则:
1、把3个字符变成4个字符。
2、每76个字符加⼀个换⾏符。
3、最后的结束符也要处理,不⾜的⽤=补位。
原⽂的字节数量应该是3的倍数,如果这个条件不能满⾜的话:原⽂剩余的字节根据编码规则继续单独转(1变2,2变3;不够的位数⽤0补全),再⽤=号补满4个字节。这就是为什么有些Base64编码会以⼀个或两个等号结束的原因,但等号最多只有两个.
编码过程:
二进制编码转换
第⼀个字符通过右移2位获得第⼀个⽬标字符;
然后将第⼀个字符与0x03(00000011)进⾏与(&)操作并左移4位,接着第⼆个字符右移4位与前者相或(|),即获得第⼆个⽬标字符。
再将第⼆个字符与0x0f(00001111)进⾏与(&)操作并左移2位,接着第三个字符右移6位与前者相或(|),获得第三个⽬标字符。
最后将第三个字符与0x3f(00111111)进⾏与(&)操作即获得第四个⽬标字符。
解码:
需留意为64的等号
相关⽅法:btoa atob 对单字节字符可以
2、hex
⼗六进制(简写为hex或下标16),⼀般⽤数字0到9和字母A到F(或a~f)表⽰,其中:A~F表⽰10~15,这些称作⼗六进制数字。
1字节可以表⽰成2个连续的16进制数字
相关⽅法:tostring(16) parseInt(0xff,16)
3、utf8
utf-8是⼀种针对Unicode的可变长度字符编码,utf-8⽤1到4个字节编码Unicode字符。
UTF-8编码规则:如果只有⼀个字节则其最⾼⼆进制位为0;如果是多字节,其第⼀个字节从最⾼位开始,连续的⼆进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头
实际表⽰ASCII的UNICODE字符,将会编码成1个,并且UTF-8表⽰与ASCII字符表⽰是⼀样的。所有其他的UNICODE字符转化成UTF-8将需要⾄少2个字节。每个字节由⼀个开始。第⼀个字节由唯⼀的换码序列,由n位连续的1加⼀位0组成, ⾸字节连续的1的个数表⽰所需的字节数
Unicode转换为UTF-8时,可以将Unicode⼆进制从低位往⾼位取出⼆进制数字,每次取6位,如上述的⼆进制就可以分别取出为如下⽰例所⽰的格式,前⾯按格式填补,不⾜8位⽤0填补。
注:Unicode转换为UTF-8需要的字节数可以根据这个规则计算:如果Unicode⼩于0X80(Ascii字符),则转换后为1个字节。否则转换后的字节数为Unicode⼆进制位数+3再除以5。
4、utf16
UTF-16⽐起,好处在于⼤部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却⽆法兼容于编码。
5、byte[]
字节数组 ⼀般存放ascll值 负值时可以加256变为正值
相关⽅法:charcodeat() String.fromCharCode
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论