gpt4 book ai didi

c++ - 签名的二进制表示是否可以在体系结构之间移植?

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:48 26 4
gpt4 key购买 nike

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

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

例如,带符号负长整数的二进制表示在 ARM 机器上和在 x86 机器上是否相同?如果是,利用这一事实是否被认为是好的/可接受的做法?

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

最佳答案

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

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

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

关于c++ - 签名的二进制表示是否可以在体系结构之间移植?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22879068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com