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

将字符串解释为压缩的二进制数据,Python vs Java,java,python,binary,struct,byte,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)); -

我正在用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中是负数?
非常感谢。

字节在java中是一种有符号的数据类型——是的,我也不明白他们为什么这么做。您需要使用一个短字符(因为所有的位运算都是在int上使用的,所以只需真正使用int)并忽略更高的8bit(否则符号扩展将是一个问题)


Java中不会有未签名的类型。您可以考虑将其转换为短或int。<符号>字节的范围为-128…127,因此(127 + 1)=-4/< p> BTW <代码> char < /Cord>是无符号类型。的确如此。但就数字而言,您不会有无符号类型。是的,我知道说
charc=100是正确的但是看到JavaLang.Grar如何不扩展数字,我不认为它是一个数字。或者只是<代码> St.out。PrtLn((32809>8)和0xFF);<代码>是否表示(字节)128=-128?是。从127“环绕”递增-127的位模式为0x7F;加一则为0x80;解释为有符号字节,这是-128。有符号字节中没有足够的位正确表示+128。
 System.out.println(((short) ((32809 & 0xFF00) >> 8)) & 0xFF);