我在主机(依赖于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);
答案 0 :(得分:9)
从技术上讲,变量内部的值无关紧要,因为您只想借用该功能。将signed转换为unsigned时,其值会更改,但位相同。所以将它转换回签名就好了。
编辑:正如amrit所说,它是Signed Integer Network and Host Conversion的副本。