在体系结构之间可移植的有符号二进制表示形式



我想通过网络以字符流的形式发送有符号整数,和/或将它们以可移植的二进制表示形式保存到磁盘。

当我分配一个变量(我使用long long,64位,有符号)时存储在内存中的普通二进制表示形式是否被认为是在不同的机器架构和操作系统之间可移植的?

例如,有符号负长整型整数的二进制表示形式在 ARM 计算机上是否与在 x86 计算机上相同,如果是这样,利用这一事实是否被认为是良好/可接受的做法?

编辑:我们已经通过使用整数操作从 LSB 端将整数解构为字符来解决字节顺序问题。我的问题是 2 的补码有符号表示在架构中是否一致。

简而言之:,您不能依赖跨体系结构的二进制兼容性。不同的主机使用不同的字节顺序(这称为字节序)。

要通过网络传输数字,通常同意使用大端格式(也称为网络字节顺序)。如果两台机器都使用大端格式,它们将自动利用这一点。对于 ARM 体系结构,需要转换字节顺序。

要从网络转换为主机字节顺序,反之亦然,您可以使用arpa/inet.h中的ntohl()ntohs()htonl()htons()函数族。

整数在 C/C++ 中不是"设计可移植的";您可能会遇到字节序问题。这与它们被签名或未签名无关

如果您正在编写此软件,请确保以已知的字节顺序发送整数。接收部分需要以相同的顺序读取它们,并在必要时执行字节序转换。

最新更新