签名整数网络和主机转换

v1A*_*xvw 8 c unix signed integer endianness

我想将int32_t主机字节顺序转换为网络字节顺序,反之亦然.我知道htonl()函数及其变体,但这需要无符号整数.是否有标准库函数可以使用有符号整数执行相同的操作,还是我必须自己实现它?如果我必须自己实施,我应该怎么做?

我正在寻找一个适用于Linux和Mac OS X的例程.

小智 7

不要紧.htonl关注字节,而不是数字的算术值.如果必须,使用reinterpret_cast将数字更改为unsigned,然后再返回.

  • 因为他正在使用C,所以他应该只调用`htonl((uint32_t)address);` (12认同)
  • @joeforker 在溢出的情况下会导致未定义的行为。请删除您的评论。改用`memcpy`。 (2认同)