Может ли кто-то привести фактическую реализацию псевдокода для преобразования порядка байтов хоста в сетевой порядок байтов
Стабильный псевдокод упоминается по следующей ссылке. Я хотел бы реализовать это в 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()
для радиуса не степени двух); это приведет к нормализации дроби (с диапазоном в зависимости от того, какую функцию вы использовали для извлечения показателя).