简体   繁体   中英

Binary serialization of floating point numbers (restricted to IPC)

I have two processes running on the same device (no VMs involved), communicating over a binary IPC protocol. Since this guarantees that the the representation of the number is the same for the sender and the receiver, can I safely assume that the following serialization will work on any device that supports floating point numbers?

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);

Since the sender and the receiver are identical architectures, there are no endian issues, floating point, integer, or otherwise.

If the architectures are different, you might have problems. See this post or this post .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM