以下代码无法解码纬度和经度.
输出是:132, 1, 1645780273, 77276230, 0, -0.000000, 0.000000
,对最后两个值纬度和经度进行了错误的转换.
如果我从 struct 中删除前4个值并删除uint32_t identifiers;
,我会得到正确的结果132, 1, 1645780273, 77276230, 0, 59.877871, 10.465200
非常感谢您对理解这种行为的任何帮助.
#include <stdio.h>
#include <string.h>
int main() {
union {
unsigned char bytes[36];
struct{
uint32_t identifier;
uint16_t telegram_size;
uint16_t telegram_version;
uint32_t seconds;
uint32_t nanoseconds;
uint32_t stat;
double latitude;
double longitude;
}unpack;
}telegram;
unsigned char values[] = {0x23, 0x4B, 0x4D, 0x42, 0x84, 0x00, 0x01, 0x00, 0x31, 0x9d, 0x18, 0x62, 0x46, 0x24, 0x9b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x3e, 0x2c, 0x11, 0x5e, 0xf0, 0x4d, 0x40, 0xCA, 0x32, 0xC4, 0xB1, 0x2E, 0xEE, 0x24, 0x40};
memcpy(telegram.bytes, values, 36);
for (int i=0;i<36;i++){
printf("%02X ", telegram.bytes[i]);
}
printf("\n%u, %u, %u, %u, %u, %f, %f\n", telegram.unpack.telegram_size, telegram.unpack.telegram_version, telegram.unpack.seconds, telegram.unpack.nanoseconds, telegram.unpack.stat, telegram.unpack.latitude, telegram.unpack.longitude);
return 0;
}