我正在使用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解释为浮点数?
由于
答案 0 :(得分:5)
你可以直接读入缓冲区
float data[9];
udp.read((char*)data, sizeof(data));
答案 1 :(得分:3)
这很危险,技术上没有很好的定义,你做的方式更好。
也就是说,在某些平台上你可以逃脱:
float *f1 = (float *)data;
float *f2 = (float *)(data + 4);
此外,在您的代码中,我认为没有理由直接memcpy
来data + 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]);