Есть ли в C ++ «стандартная» htonl-подобная функция для 64-битных чисел?
Я работаю над реализацией протокола memcache, который в некоторых моментах использует 64-битные целочисленные значения. Эти значения должны храниться в «сетевом порядке байтов».
Я хотел бы было немногоuint64_t htonll(uint64_t value)
функция для внесения изменений, но, к сожалению, если она существует, я не смог ее найти.
Итак, у меня есть 1 или 2 вопроса:
Есть липортативный (Windows, Linux, AIX) стандартная функция для этого?Если такой функции нет, как бы вы ее реализовали?Я имею в виду базовую реализацию, но я не знаю, как проверить порядок байтов во время компиляции, чтобы сделать код переносимым. Так что ваша помощь здесь приветствуется;)
Спасибо.
Вот окончательное решение, которое я написал, благодаря решению Брайана.
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;
}
}