有符号整数的字节顺序转换

7

我有一个问题需要在主机(依赖于CPU)和网络(大端)之间翻译字节顺序。下面是我找到的所有可能解决该问题的API(位于Linux中的“arpa/inet.h”中)。

 uint32_t htonl(uint32_t hostlong);

 uint16_t htons(uint16_t hostshort);

 uint32_t ntohl(uint32_t netlong);

 uint16_t ntohs(uint16_t netshort);

除了一个问题外,它们只处理无符号整数(2字节或4字节)。

那么有没有方法来处理带符号整数?换句话说,如何实现以下函数(API)?

 int32_t htonl(int32_t hostlong);

 int16_t htons(int16_t hostshort);

 int32_t ntohl(int32_t netlong);

 int16_t ntohs(int16_t netshort);

听起来像是 https://dev59.com/KlPTa4cB1Zd3GeqPn_e1 的重复问题。 - amrith
1个回答

11

从技术上讲,变量内的值并不重要,因为您只是想借用功能。将有符号数分配给无符号数时,其值会更改但位数保持不变。因此将其转换回有符号数是可以的。

编辑:正如amrit所说,这是有符号整数网络和主机转换的重复。


谢谢。您的回答比重复的更有帮助。 - lulyon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接