2015-05-09 2 views
1

У меня есть два процесса, выполняющихся на том же устройстве (не задействованных виртуальных машин), обмениваясь бинарным протоколом IPC. Поскольку это гарантирует, что представление числа одинаково для отправителя и получателя, могу ли я с уверенностью предположить, что следующая сериализация будет работать на любом устройстве, которое поддерживает числа с плавающей запятой?Двоичная сериализация чисел с плавающей запятой (только для IPC)

void store_double(uint8_t *buf, double d) 
{ 
    memcpy(buf, &d, sizeof(double)); 
} 

double load_double(uint8_t const *buf) 
{ 
    double d; 
    memcpy(&d, buf, sizeof(double)); 
    return d; 
} 

double orig = 123.456; 
uint8_t serialized[sizeof(double)]; 
store_double(serialized, orig); 
// send serialized bytes to the receiver 

// receive serialized bytes from the sender 
double copy = load_double(serialized); 
+1

Как вы ограничиваете свою среду, чтобы избежать проблем с контентом, я бы сказал, что это безопасно (до тех пор, пока 'buf' достаточно длинный, что ваш случай). – Jarod42

+1

Проблемы с Endian не должны иметь значения, если аппаратное обеспечение на обоих концах представляет значения «double» в двойном формате IEEE: http://en.wikipedia.org/wiki/Double-precision_floating-point_format –

ответ

1

Поскольку отправитель и получатель идентичны архитектуре, нет никаких проблем с концами, с плавающей точкой, целыми числами или иначе.

Если у вас разные архитектуры, у вас могут быть проблемы. См. Это post или это post.

Смежные вопросы