2 つの double (GPS 座標) を取得し、ZigBee API を介して別の ZigBee 受信機ユニットに送信しようとしていますが、double をバイト配列に分解してから元の形式に再構成する方法がわかりません。それらが転送されたら。
基本的に、各 double を 8 つの raw バイトの配列に変換し、その raw データを取得して double を再構築する必要があります。
何か案は?
あなたがしていることは型のパンニングと呼ばれています。
ユニオンを使用します。
union {
double d[2];
char b[sizeof(double) * 2];
};
または使用reinterpret_cast
:
char* b = reinterpret_cast<char*>(d);
これを行うにはかなり危険な方法があります:
double d = 0.123;
char *byteArray = (char*)&d;
// we now have our 8 bytes
double final = *((double*)byteArray);
std::cout << final; // or whatever
または、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
通常、doubleはすでに8バイトです。sizeof(double)とsizeof(char)を比較して、オペレーティングシステムでこれを確認してください。C ++はバイトを宣言しません、通常それはcharを意味します
それが本当に本当なら。
double x[2] = { 1.0 , 2.0};
double* pToDouble = &x[0];
char* bytes = reinterpret_cast<char*>(pToDouble);
これで、バイトはZigBeeに送信する必要があるものです