Недавно я работал над системой, которая должна хранить и загружать большое количество данных, включая значения с плавающей запятой с одинарной точностью. Я решил стандартизировать сетевой порядок байтов для целых чисел, а также решил хранить значения с плавающей запятой в формате big-endian, т.е.
|-- 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
, чтобы сделать это?
У меня есть один ответ, который, кажется, работает, и я опубликую его ниже, но он выглядит довольно медленным и неэффективным, и я был бы признателен за любые предложения о том, как сделать его быстрее и/или более надежным.