我可以将指针转换为类型为char *
的double,然后使用该指针将双精度转换为字节吗?
以下是示例代码:
double data;
double *dblPoint = &data;
unsigned char *bytePoint = (unsigned char *)dblPoint;
unsigned char byteArray[sizeof (double)];
unsigned int i;
for(i = 0; i < sizeof(double); i++) {
byteArray[i] = *(bytePoint + i);
}
byteArray
然后通过UART传输到另一台计算机并重建(bytesReceived
包含传入的数据):
unsigned char bytesReceived[sizeof (double)];
double reconstData;
double *newDblPoint;
unsigned int i;
newDblPoint = bytesReceived;
reconstData = *dblPoint;
那么,毕竟那会是data == reconstData
吗?
答案 0 :(得分:4)
是的,你基本上可以这样做。需要注意的一个问题是,如果两台机器没有相同的字节顺序,那么您需要在一侧反转字节顺序。
答案 1 :(得分:1)
见C99 Standard中的6.2.6.1/4。
基本上,它表示将任何对象复制到unsigned char
数组是合法的并获取其对象表示。
如果两台机器之间双打的对象表示是相同的,那么第二台机器上的值将与您在1号机器上开始时的值相同。
我使用memcpy
而不是循环
memcpy(byteArray, &data, sizeof data);
答案 2 :(得分:1)
您的第一个示例可以简化为:
double data;
unsigned char bytesReceived[sizeof double];
memcpy ( bytesReceived, &data, sizeof data);
您的第二个示例无效:缓冲区
unsigned char bytesReceived[sizeof double];
不一定在“双”边界上对齐,以便施放
newDblPoint = bytesReceived;
reconstData = *dblPoint;
将尝试取消引用未对齐的指针。