Java 是以小端还是大端读取整数?

新手上路,请多包涵

我问是因为我正在从 C 进程向 Java 发送字节流。在 C 端,32 位整数的 LSB 是第一个字节,MSB 是第四个字节。

所以我的问题是:在 Java 端,当我们读取从 C 进程发送的字节时,Java 端的字节 是什么?

追问:如果Java端的字节序和发送的字节序不一样,如何相互转换?

原文由 hhafez 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 591
2 个回答

使用网络字节顺序(big endian),这与 Java 使用的相同。有关 C 中不同翻译器的信息,请参阅 man htons。

原文由 Egil 发布,翻译遵循 CC BY-SA 2.5 许可协议

我通过谷歌在这里偶然发现并得到了 Java is big endian 的答案。

通读所有回复,我想指出字节确实有字节顺序,不过谢天谢地,如果你只接触过“主流”微处理器,你不太可能遇到过它,因为英特尔、摩托罗拉和 Zilog 都是就他们的 UART 芯片的移位方向达成一致,一个字节的 MSB 将是 2**7 而 LSB 将是 2**0 在他们的 CPU 中(我使用 FORTRAN 幂符号来强调这个有多旧东西是:))。

20 多年前,当我们用 Mac 计算机替换价值 1 万美元的接口硬件时,我遇到了一些航天飞机位串行下行数据的问题。很久以前有一篇关于它的 NASA 技术简报。在从位流中移入每个字节后,我只是使用了一个 256 元素的查找表,其中位反转( table[0x01]=0x80 等)。

原文由 WB Greene 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏