Signed Integer Network and Host Conversion
我想将
我正在寻找一个可以在Linux和Mac OS X上运行的例程。
没关系。 htonl与字节有关,与数字的算术值无关。如果需要的话,使用reinterpret_cast将数字更改为unsigned,然后再次返回。
如果一个系统(您可能永远不知道运行什么Linux)可能会对负整数使用不同的表示形式(例如,补码,正负号;很少见,但可能),则将数字作为字符串传输并将其解析为整数在接收器上。效率不高,但是除非您要传输大量数字,否则无关紧要。如果要传输的数字很多,则可以使用某种形式的压缩。
或者,为负数定义自己的网络表示形式,并编写自己的ntohsl和htonsl。
在任何一种方法中,每个系统上都有一个数字,而另一个则无法表示;您需要确定在收到此号码后应该采取什么适当的措施。
如果您使用的是gcc,则为此目的有一组内置函数。它们通常编译成一条指令。
1 2 3 | uint16_t __builtin_bswap16 (uint16_t x); uint32_t __builtin_bswap32 (uint32_t x); uint64_t __builtin_bswap64 (uint64_t x); |
在我的计算机上,__builtin_bswap32()编译为
1 | bswap %eax |