У меня есть эта структура, которую я хочу записать в файл:
typedef struct
{
char* egg;
unsigned long sausage;
long bacon;
double spam;
} order;
Этот файл должен быть двоичным и должен быть доступен для чтения на любой машине, которая имеет
Компилятор C99.
Я рассмотрел различные подходы к этому вопросу, такие как ASN.1, XDR, XML,
ProtocolBuffers и многие другие, но ни один из них не соответствует моим требованиям:
- маленький
- простой
- написано в C
Тогда я решил создать свой собственный протокол данных. Я мог бы справиться с
следующие представления целых типов:
- без знака
- подписано в дополнение
- подписано дополнение 2
- подписано знак и величина
действительным, простым и чистым способом (впечатляет, нет?). Тем не менее
настоящих типов сейчас больно.
Как мне прочитать float
и double
из потока байтов? Стандарт
говорит, что побитовые операторы (по крайней мере &
, |
, <<
и >>
) предназначены для
integer только типы, что оставило меня без надежды. Единственный способ, которым я мог
думаю было:
int sign;
int exponent;
unsigned long mantissa;
order my_order;
sign = read_sign();
exponent = read_exponent();
mantissa = read_mantissa();
my_order.spam = sign * mantissa * pow(10, exponent);
но это не кажется эффективным. Я также не мог найти
описание представления double
и float
. Как должен
один продолжить до этого?