I'm trying to take two doubles (GPS coordinates) and send them over the ZigBee API to another ZigBee receiver unit, but I don't know how to decompose the doubles into byte arrays and then re-compose them back into their original form once they are transferred.
Basically, I need to turn each double into an array of eight raw bytes, then take that raw data and reconstruct the double again.
Any ideas?
What you're doing is called type punning.
Use a union:
union {
double d[2];
char b[sizeof(double) * 2];
};
Or use reinterpret_cast
:
char* b = reinterpret_cast<char*>(d);
Here's a rather unsafe way to do it:
double d = 0.123;
char *byteArray = (char*)&d;
// we now have our 8 bytes
double final = *((double*)byteArray);
std::cout << final; // or whatever
Or you could use a reinterpret_cast:
double d = 0.123;
char* byteArray = reinterpret_cast<char*>(&d);
// we now have our 8 bytes
double final = *reinterpret_cast<double*>(byteArray);
std::cout << final; // or whatever
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