java - 将字符串解释为打包的二进制数据,Python 与 Java

标签 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 中是负数吗? 非常感谢。

最佳答案

Java 中的字节是一种带符号的数据类型 - 是的,我也不明白他们为什么这样做。您将需要使用一个 short(好吧,因为所有位操作都用于 int 无论如何,只需使用一个 int 真的)并忽略更高的 8 位(否则符号扩展将是一个问题)

 System.out.println(((short) ((32809 & 0xFF00) >> 8)) & 0xFF);

关于java - 将字符串解释为打包的二进制数据,Python 与 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4986273/

相关文章:

java - 如何在android中生成随机事件?

python - 有没有一种 pythonic 方法来获取可迭代中相同值的簇的开始和结束索引?

python - 检查 Python 条件循环中的非对角条目

将二进制字符串转换为十六进制字符串 C

java - 查找列表中所需条目的数量?

java - Apache CSV 解析器不适用于带引号的制表符分隔数据

java - 如何用Java中的特定字符串替换数组中的所有倍数

python - Pyarrow:将流读入 p​​andas 数据帧高内存消耗

erlang - 如何使用 Erlang 发送推送通知?

c++ - 二进制计算器减法