关于String转化为byte数组后,不进行&0xff,打印出的结果,上图,为什么是这样,汉字的一个字节前面为什么有那么多的1

来源:1-1 文件的编码

武当王也

2015-08-21 08:49

11111111111111111111111111000100  

11111111111111111111111110111101    前两行为“幕”

11111111111111111111111110111111 

11111111111111111111111111001110   前两行为“课”

1000001  “A"

1000010   "B"

1000011  "c"


写回答 关注

3回答

  • 资深老饕
    2015-08-23 02:08:56
    已采纳

    你这样可不好哦。这种情况我们可以查看 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类型为负的问题。

    这些也是我看到你的问题后才去查阅资料了解的,我还是希望大家学习编程过程中多一些磨砻淬砺,少一点不求甚解。对原理的掌握多少,觉顶你以后的高度。

    詹士 回复资深老饕

    谢谢!

    2015-10-01 12:04:39

    共 4 条回复 >

  • 小辉_0004
    2015-12-16 10:15:47

    学习了

  • 武当王也
    2015-08-21 09:27:45

    我知道了,byte为8位,int为32位,将byte转化为int,也就是相当于将byte再增加24位,这24位默认为零,汉字对应的因为反码或者什么原因,前面添加的是1,

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题