关于String转化为byte数组后,不进行&0xff,打印出的结果,上图,为什么是这样,汉字的一个字节前面为什么有那么多的1
11111111111111111111111111000100
11111111111111111111111110111101 前两行为“幕”
11111111111111111111111110111111
11111111111111111111111111001110 前两行为“课”
1000001 “A"
1000010 "B"
1000011 "c"
11111111111111111111111111000100
11111111111111111111111110111101 前两行为“幕”
11111111111111111111111110111111
11111111111111111111111111001110 前两行为“课”
1000001 “A"
1000010 "B"
1000011 "c"
2015-08-21
你这样可不好哦。这种情况我们可以查看 Integer.toHexString(int i); 的API文档:
“The unsigned integer value is the argument plus 2^32 if the argument is negative; otherwise, it is equal to the argument.”
文档说如果参数为负,那么无符号的整数值为参数加上 2^32作为参数;否则等于该参数。
那就简单了,因为这个的“慕”“课”2个字的GBK编码为 11000100(C4BD)、10111101(BFCE)(http://www.mytju.com/classCode/tools/encode_gb2312.asp查询),其作为 int 类型参数时为负数,所以实际参数为00111100+2^32、01000011+2^32 刚好就是 11111111111111111111111111000100 和 11111111111111111111111110111101。而几乎所有的编码格式中的字母都是传承的ASCII中的编码,即a~z:61~7A、A~Z:41~5A,不存在转 int类型为负的问题。
这些也是我看到你的问题后才去查阅资料了解的,我还是希望大家学习编程过程中多一些磨砻淬砺,少一点不求甚解。对原理的掌握多少,觉顶你以后的高度。
举报