Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert between double and byte array, for transfer over ZigBee API?

Tags:

c++

zigbee

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?

like image 561
lecreeg Avatar asked Nov 09 '11 02:11

lecreeg


2 Answers

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);
like image 124
Pubby Avatar answered Sep 22 '22 03:09

Pubby


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
like image 26
jli Avatar answered Sep 22 '22 03:09

jli