我应该如何读取C中的逆序字节?

时间:2014-06-16 01:01:16

标签: c endianness standard-library

我需要读取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;

是否有标准或可移植的方式来完成这类工作,或者我是否需要破解这样的功能?

1 个答案:

答案 0 :(得分:1)

适用于您平台的套接字库提供以下用于执行这些转换的函数:

  • ntohs - 网络主机短(16位)
  • htons - 主机到网络短路(16位)
  • ntohl - 网络托管长(32位)
  • htonl - 主机到网络长(32位)

要实现上述代码,您可以:

r = ntohl(*(uint32_t *)bytes);