Может ли кто-то привести фактическую реализацию псевдокода для преобразования порядка байтов хоста в сетевой порядок байтов

Стабильный псевдокод упоминается по следующей ссылке. Я хотел бы реализовать это в C++. Я не в состоянии понять и выполнить эти знаковые, экспоненциальные и мантиссационные операции.

Как конвертировать двойной между хостом и сетевым порядком байтов?

void htond (const double hostDouble, uint8_t result[8])
{
  result[0] = signOf(hostDouble);
  result[1] = exponentOf(hostDouble);
  result[2..7] = mantissaOf(hostDouble);
}

1 ответ

Чтобы получить знак (даже для отрицательных нулей) используйте std::signbit(),

Чтобы извлечь показатель, используйте std::frexp() (или же std::ilogb() для не-степени двух радиуса). Обратите внимание, что вы должны обрабатывать ноль, бесконечность и NaN как особые случаи.

Мантисса может быть получена с std::abs(std::ldexp(value, -exponent)) (или же std::scalbn() для радиуса не степени двух); это приведет к нормализации дроби (с диапазоном в зависимости от того, какую функцию вы использовали для извлечения показателя).

Другие вопросы по тегам