我正在研究memcache協議的實現,它在某些點上使用64位整數值。這些值必須以「網絡字節順序」存儲。C++中是否有64位整數的「標準」htonl函數?
我希望有一些uint64_t htonll(uint64_t value)
功能來做改變,但不幸的是,如果它存在,我找不到它。
所以,我有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<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;
}
}
這個可能的重複http://stackoverflow.com/questions/809902/64-bit-ntohl-in-c – INS 2010-06-11 13:05:47
@ereOn:我也有類似的問題[這裏](http://stackoverflow.com/問題/ 19393539 /如何對交換-64位整數,而解壓字節從 - ByteArray的功能於c)中。如果可能的話,你可以看看,讓我知道我在這裏做什麼錯誤? – AKIWEB 2013-10-16 05:10:42
你不應該在問題中包含你的答案,而應該讓你的答案與答案一致。它更具可讀性。 – mpromonet 2015-08-29 15:24:55