我正在努力实现memcache协议,在某些点,使用64位整数值。这些值必须以“网络字节顺序”存储。
我希望有一些uint64_t htonll(uint64_t值)函数来做更改,但不幸的是,如果它存在,我找不到它。
所以我有1或2个问题:
>有没有任何可移植的(Windows,Linux,AIX)标准功能这样做?
>如果没有这样的函数,你怎么实现呢?
我想到一个基本的实现,但我不知道如何检查在编译时的字节序,使代码可移植。所以你的帮助是更欢迎这里;
谢谢。
这是我写的最终解决方案,感谢Brian的解决方案。
uint64_t htonll(uint64_t value)
{
// The answer is 42
static const int num = 42;
// Check the endianness
if (*reinterpret_cast(&num) == num)
{
const uint32_t high_part = htonl(static_cast(value >> 32));
const uint32_t low_part = htonl(static_cast(value & 0xFFFFFFFFLL));
return (static_cast(low_part) << 32) | high_part;
} else
{
return value;
}
}