Я недавно работал над системой, которая должна хранить и загружать большое количество данных, включая значения с плавающей запятой с одинарной точностью. Я решил стандартизировать сетевой порядок байт для целых чисел, а также решил хранить значения с плавающей запятой в тупоконечника формата, то есть:Переносная сериализация значений с плавающей запятой IEEE754
|-- Byte 0 --| |-- Byte 1 -| Byte 2 Byte 3
# ####### # ####### ######## ########
Sign Exponent Mantissa
1b 8b, MSB first 23b, MSB first
В идеале, я хочу, чтобы обеспечить такие функции, как htonl()
и ntohl()
, так как у меня уже использовали их для целых чисел swabing, и я также хочу реализовать их таким образом, чтобы максимально возможная независимость от платформы (при условии, что тип float
соответствует 32-разрядным значениям с плавающей запятой IEEE754). Есть ли способ, возможно, используя ieee754.h
?
У меня есть один ответ, который кажется, и я отправлю его ниже, но он выглядит довольно медленным и неэффективным, и я был бы признателен за любые предложения о том, как сделать его быстрее и/или более надежным.
Об этом: http://stackoverflow.com/a/2782742/1327576? – smocking
Я посмотрел на этот ответ, и ясно, что это зависит от предположения, что представление хоста малопригодно. Я ищу что-то, что связано с хостом-байтом-агностиком. –
Возможно, 'snprintf (b, sizeof (b),"% .9001f ", yourvalue)' (текстовое представление) является наиболее переносимым. –