How can I serialize doubles and floats in C?
I have the following code for serializing shorts, ints, and chars.
unsigned char * serialize_char(unsigned char *buffer, char value)
{
buffer[0] = value;
return buffer + 1;
}
unsigned char * serialize_int(unsigned char *buffer, int value)
{
buffer[0] = value >> 24;
buffer[1] = value >> 16;
buffer[2] = value >> 8;
buffer[3] = value;
return buffer + 4;
}
unsigned char * serialize_short(unsigned char *buffer, short value)
{
buffer[0] = value >> 8;
buffer[1] = value;
return buffer + 2;
}
Edit:
I found these functions from this question
Edit 2:
The purpose of serializing is to send data to a UDP socket and guarantee that it can be deserialized on the other machine even if the endianness is different. Are there any other "best practices" to perform this functionality given that I have to serialize ints, doubles, floats, and char*?
The portable way: use frexp
to serialize (convert to integer mantissa and exponent) and ldexp
to deserialize.
The simple way: assume in 2010 any machine you care about uses IEEE float, declare a union with a float
element and a uint32_t
element, and use your integer serialization code to serialize the float.
The binary-file-haters way: serialize everything as text, floats included. Use the "%a"
printf format specifier to get a hex float, which is always expressed exactly (provided you don't limit the precision with something like "%.4a"
) and not subject to rounding errors. You can read these back with strtod
or any of the scanf
family of functions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With