"秋"字, 使用工具查询的GBK编码是 C7 EF。
C7 EF转换成10进制数是 199 239
- Java code
String s = "秋";byte[] b = s.getBytes("gbk");for(int i=0; i<b.length; i++){ System.out.println(b[i]);}
结果输出的不是 199 239 而是 -57 -17
请问这是怎么回事?中间到底发生了什么?为什么结果不正确?
------解决方案--------------------------------------------------------
byte 最大值127 所以是-的
------解决方案--------------------------------------------------------
c7转为二进制:1100 0111,你输出的时候,系统会把这个看为一个整数,最高位为1,那就是一个负数。
1100 0111是补码,转为反码1100 0110,再转为原码1011 1001=-(1+8+16+32)=-57
------解决方案--------------------------------------------------------
- Java code
String s = "秋"; byte[] b = s.getBytes("gbk"); for (int i = 0; i < b.length; i++) { System.out.println(Integer.toHexString(b[i]&0xFF)); System.out.println(Integer.toBinaryString(b[i]&0xFF)); }输出:c711000111 //-57的二进制补码ef11101111