8

2 つの double (GPS 座標) を取得し、ZigBee API を介して別の ZigBee 受信機ユニットに送信しようとしていますが、double をバイト配列に分解してから元の形式に再構成する方法がわかりません。それらが転送されたら。

基本的に、各 double を 8 つの raw バイトの配列に変換し、その raw データを取得して double を再構築する必要があります。

何か案は?

4

3 に答える 3

8

あなたがしていることは型のパンニングと呼ばれています。

ユニオンを使用します。

union {
  double d[2];
  char b[sizeof(double) * 2];
};

または使用reinterpret_cast

char* b = reinterpret_cast<char*>(d);
于 2011-11-09T02:54:08.513 に答える
6

これを行うにはかなり危険な方法があります:

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
于 2011-11-09T02:53:44.023 に答える
1

通常、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に送信する必要があるものです

于 2011-11-09T02:50:56.380 に答える