Есть ли в 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;
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос