2015-05-13 8 views
0

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

how to convert double between host and network byte order?

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

ответ

0

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

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

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

+0

Можете ли вы дать мне рабочий код с примерами входов: 1000000015949038, 1000000015949030 и т. Д. – Hiesenberg