我需要读取unsigned char *字节,它们与本机顺序的顺序相反。目前,我有很多小例程:
uint8_t * bytes;
uint32_t r;
bytes = pt;
r = (((((bytes[0] << 8) + bytes[1]) << 8) + bytes[2]) << 8) + bytes[3];
pt += 4;
return r;
是否有标准或可移植的方式来完成这类工作,或者我是否需要破解这样的功能?
答案 0 :(得分:1)
适用于您平台的套接字库提供以下用于执行这些转换的函数:
ntohs
- 网络主机短(16位)htons
- 主机到网络短路(16位)ntohl
- 网络托管长(32位)htonl
- 主机到网络长(32位)要实现上述代码,您可以:
r = ntohl(*(uint32_t *)bytes);