我在用 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 中的字节是一种带符号的数据类型 - 是的,我也不明白他们为什么这样做。您将需要使用一个 short(好吧,因为所有位操作都用于 int 无论如何,只需使用一个 int 真的)并忽略更高的 8 位(否则符号扩展将是一个问题)
System.out.println(((short) ((32809 & 0xFF00) >> 8)) & 0xFF);
关于java - 将字符串解释为打包的二进制数据,Python 与 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4986273/