memcpy的替代方案

时间:2014-05-10 18:21:25

标签: c pointers floating-point arduino memcpy

我正在使用Arduino来解析从本地网络上的应用程序发送的UDP包。消息包含36个字节的信息。前四个字节代表一个(单精度)浮点数,接下来的四个字节代表另一个字节,等等。

Arduino函数udp.read()将数据读取为字符,最后得到一个数组

char data[36] = { ... };

我现在正在寻找一种方法将其转换为相应的九个浮点数。我发现的唯一解决方案是重复使用这个技巧:

float f;
char b[] = {data[0], data[1], data[2], data[3]};
memcpy(&f, &b, sizeof(f));

但是,我确信必须有更好的方法。我可以使用指针而不是复制内存块,而只是告诉C将b解释为浮点数?

由于

3 个答案:

答案 0 :(得分:5)

你可以直接读入缓冲区

float data[9];
udp.read((char*)data, sizeof(data));

答案 1 :(得分:3)

这很危险,技术上没有很好的定义,你做的方式更好。

也就是说,在某些平台上你可以逃脱:

float *f1 = (float *)data;
float *f2 = (float *)(data + 4);

此外,在您的代码中,我认为没有理由直接memcpydata + offset {/ 1}}。

答案 2 :(得分:3)

union Data
{
   char  data[36];
   float f[9];
};


union Data data;
data.data[0] = 0;
data.data[1] = 0;
data.data[2] = 0;
data.data[3] = 0;

fprintf(stdout,"float is %f\n",data.float[0]);