在双字节和字节数组之间转换,以便通过ZigBee API进行传输?

lec*_*eeg 6 c++ zigbee

我试图拿两个双打(GPS坐标)并通过ZigBee API将它们发送到另一个ZigBee接收器单元,但我不知道如何将双精度分解为字节数组,然后将它们重新组合成原始形式一旦他们被转移.

基本上,我需要将每个double转换为一个包含8个原始字节的数组,然后获取原始数据并重新构建double.

有任何想法吗?

jli*_*jli 6

这是一种相当不安全的方法:

double d = 0.123;
char *byteArray = (char*)&d;

// we now have our 8 bytes

double final = *((double*)byteArray);
std::cout << final; // or whatever
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 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
Run Code Online (Sandbox Code Playgroud)


Pub*_*bby 5

您正在做的事情叫做type punning

使用联合:

union {
  double d[2];
  char b[sizeof(double) * 2];
};
Run Code Online (Sandbox Code Playgroud)

或使用reinterpret_cast

char* b = reinterpret_cast<char*>(d);
Run Code Online (Sandbox Code Playgroud)