[英]Is there a portable Binary-serialisation schema in FlatBuffers/Protobuf that supports arbitrary 24bit signed integer definitions?
[英]Are signed binary representations portable between architectures?
我想在字符流中通过网络发送带符号的整数,和/或以可移植的二进制表示形式将其保存到磁盘。
当我分配一个变量(我使用的是long long,它是64位,带符号)时,存储在内存中的普通二进制表示是否被认为可以在不同的机器体系结构和操作系统之间移植?
例如,带符号的负long long整数的二进制表示在ARM机器上是否与x86机器上的相同?如果是,则利用这一事实是否被视为良好/可接受的做法?
编辑:我们已经通过使用整数运算从LSB端将整数解构为char来解决字节顺序的问题。 我的问题是2的补码符号表示在整个体系结构中是否一致。
简而言之: NO ,您不能依赖跨体系结构的二进制兼容性。 不同的主机使用不同的字节顺序(称为endianess )。
为了通过网络传输数字,通常同意使用大端格式(又名网络字节顺序)。 如果两台计算机都使用大字节序格式,则它们将自动利用此优势。 对于ARM体系结构,字节顺序需要转换。
要将网络转换为主机字节顺序,反之亦然,可以使用arpa/inet.h
的ntohl()
, ntohs()
, htonl()
和htons()
函数族。
在C / C ++中,整数不是“设计可移植的”。 您可能会遇到字节顺序问题。 这与他们被签名或未签名无关 。
如果您正在编写此软件,请确保以已知的字节顺序发送整数。 接收部分需要以相同的顺序读取它们,必要时执行字节顺序转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.