将字符串解释为压缩二进制数据,Python与Java

时间:2011-02-13 19:16:27

标签: java python binary struct byte

我在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中是负面的吗? 非常感谢。

3 个答案:

答案 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。