我在Java和Python中用二进制文件来翻译程序
在python中执行以下命令时,我有
>>> print ord(pack('>H', 32809)[0])
128
>>> print ord(pack('>H', 32809)[1])
41
在Java中,我希望在执行以下命令时得到相同的结果,但它不存在:
bsh % print ((byte)((32809 & 0xFF00) >> 8));
-128
bsh % print ((byte)(32809 & 0x00FF));
41
有人可以解释为什么128在Java中是负面的吗? 非常感谢。
答案 0 :(得分:2)
java中的字节是签名数据类型 - 是的,我从来不明白为什么他们这样做。你需要使用一个short(因为无论如何都会在int上使用所有位操作,只需要使用int)并忽略更高的8位(否则符号扩展会有问题)
System.out.println(((short) ((32809 & 0xFF00) >> 8)) & 0xFF);
答案 1 :(得分:1)
有符号字节的范围是-128..127,所以(127 + 1)== -128
答案 2 :(得分:0)
您不会在Java中使用无符号类型。您可以考虑将其转换为short或int。