`

字符串-字符-二进制关系

阅读更多

 

用一个实例来说明汉字如何转换为对应的字节。

中文编码是UNIQUE编码,即2个字节标识一个汉字;

 

如:我 = byte[] bs3 =new byte[]{-50,-46} = GBK编码10进制为52946。

 

如:

String str2 = "我";

byte[] bs2 = str2.getBytes("gbk");

我用gbk编码后的字节为:byte[] bs2 = new byte[]{-50,-46} 

 

中间计算机做了什么呢! 

1 我转换为字符“我”

2 找到相应的编码表 ,即gbk的编码表,然后拿到编码表对应 “我” 的二进制数值,

3 二进制数字解析为2个字节,字节1的十进制为=-50,字节2的十进制为=-46 

4 返回两个字节的数组=bs2 

 

将bs2转换为“我”这个汉字:

1 计算-50对应的二进制数值="11001110"(补码)

 计算方式:String tString = Integer.toBinaryString((-50 & 0xFF) + 0x100).substring(1);

 Java & 0xff:https://wenku.baidu.com/view/e454c202ed630b1c59eeb5ea.html

 

2 计算-46对应的二进制数值="11010010"(补码)

 计算方式:String tString = Integer.toBinaryString((-50 & 0xFF) + 0x100).substring(1);

3 拼接两个字节为=1100111011010010=52946

  转换地址:http://tool.oschina.net/hexconvert/

4 查找“我”GBK编码10进制数值是52946,正好与上面相等

  汉字与编码转换:http://www.mytju.com/classcode/tools/encode_gb2312.asp

 

 

        String str2 = "我";
//      char a = str.charAt(0);
        byte[] bs = str2.getBytes("utf-8");
        byte[] bs2 = str2.getBytes("gbk");
//      -50,-46 我
        byte[] bs3 =new byte[]{-50,-46,97,1};

        System.out.println(new String( bs3,"gbk"));
        System.out.println(  "111");
        System.out.println( (-50 & 0xFF)  );
        String tString = Integer.toBinaryString((-50 & 0xFF) + 0x100);
        String tString2 = Integer.toBinaryString((-46 & 0xFF) + 0x100).substring(1);
        System.out.println(tString +" "+tString2 );

 

 org.springframework.util.ObjectUtils :对象操作的工具类,判null,isArray,containsElement,hashCode,nullSafeToString

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics