我问是因为我正在从 C 进程向 Java 发送字节流。在 C 端,32 位整数的 LSB 是第一个字节,MSB 是第四个字节。
所以我的问题是:在 Java 端,当我们读取从 C 进程发送的字节时,Java 端的字节 序 是什么?
追问:如果Java端的字节序和发送的字节序不一样,如何相互转换?
原文由 hhafez 发布,翻译遵循 CC BY-SA 4.0 许可协议
我问是因为我正在从 C 进程向 Java 发送字节流。在 C 端,32 位整数的 LSB 是第一个字节,MSB 是第四个字节。
所以我的问题是:在 Java 端,当我们读取从 C 进程发送的字节时,Java 端的字节 序 是什么?
追问:如果Java端的字节序和发送的字节序不一样,如何相互转换?
原文由 hhafez 发布,翻译遵循 CC BY-SA 4.0 许可协议
我通过谷歌在这里偶然发现并得到了 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 许可协议
4 回答1.4k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答726 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
使用网络字节顺序(big endian),这与 Java 使用的相同。有关 C 中不同翻译器的信息,请参阅 man htons。