Bob Builder
Bob Builder

Reputation: 443

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

Upvotes: 1

Views: 199

Answers (1)

Craig S. Anderson
Craig S. Anderson

Reputation: 7374

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.

Upvotes: 1

Related Questions