使用指针将双重打入字符?

时间:2011-11-23 23:23:55

标签: c pointers types casting

我可以将指针转换为类型为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吗?

3 个答案:

答案 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;

将尝试取消引用未对齐的指针。