static bool IsBigEndian()
{
const int n = 1;
if(*(char *)&n)
{
return false;
}
return true;
}
#define swap64(val) (((val) >> 56) |\
(((val) & 0x00ff000000000000ll) >> 40) |\
(((val) & 0x0000ff0000000000ll) >> 24) |\
(((val) & 0x000000ff00000000ll) >> 8) |\
(((val) & 0x00000000ff000000ll) << 8) |\
(((val) & 0x0000000000ff0000ll) << 24) |\
(((val) & 0x000000000000ff00ll) << 40) |\
(((val) << 56)))
#define hton64(val) IsBigEndian() ? val : swap64(val)
#define ntoh64(val) hton64(val)
int main()
{
unsigned long long val = 0x1234567823456789ll;
printf(" %llx\n %llx\n %llx\n %llx\n", val, hton64(val), ntoh64(val), hton64(ntoh64(val)));
return 0;
}
可以看到hton和ntoh的实现代码其实是一模一样的。
64位整数网络序主机序转换函数实现
本文详细介绍了如何实现64位整数在网络序与主机序之间的转换,包括判断当前系统字节序的方法及转换函数的编写。
6178

被折叠的 条评论
为什么被折叠?



