Переносимая сериализация значений с плавающей запятой IEEE754

Недавно я работал над системой, которая должна хранить и загружать большие объемы данных, включая значения с плавающей запятой одинарной точности. Я решил стандартизировать сетевой порядок байтов для целых чисел, а также решил хранить значения с плавающей запятой в формате с обратным порядком байтов, то есть:

  |-- Byte 0 --| |-- Byte 1 -|  Byte 2   Byte 3
  #      ####### #     ####### ######## ########
Sign     Exponent          Mantissa
 1b    8b, MSB first    23b, MSB first

В идеале я хочу предоставить такие функции, как htonl()и . ] ntohl(), так как я уже использовал их для выборки целых чисел, и я также хочу реализовать это таким образом, чтобы обеспечить максимальную независимость от платформы (предполагая, что floatтип соответствует 32-битным значениям с плавающей запятой IEEE754). Есть ли способ, возможно, с помощью ieee754.hсделать это?

У меня есть один ответ, который кажетсярабочим, и я опубликую его ниже, но он кажется довольно медленным и неэффективным, и я был бы признателен за любые предложения о том, как сделать его быстрее и/или более надежным.

12
задан Stephen Canon 16 May 2012 в 15:11
поделиться