最佳答案
我正在研究 memcache 协议的一个实现,该协议在某些情况下使用64位整数值。这些值必须按“网络字节顺序”存储。
我希望有一些 uint64_t htonll(uint64_t value)
函数来做改变,但不幸的是,如果它存在,我找不到它。
我有一两个问题:
我想到了一个基本的实现,但是我不知道如何在编译时检查 endianness 来使代码可移植。因此,这里非常欢迎你的帮助;)
谢谢你。
这是我写的最终解决方案,感谢布莱恩的解决方案。
uint64_t htonll(uint64_t value)
{
// The answer is 42
static const int num = 42;
// Check the endianness
if (*reinterpret_cast<const char*>(&num) == num)
{
const uint32_t high_part = htonl(static_cast<uint32_t>(value >> 32));
const uint32_t low_part = htonl(static_cast<uint32_t>(value & 0xFFFFFFFFLL));
return (static_cast<uint64_t>(low_part) << 32) | high_part;
} else
{
return value;
}
}