【发布时间】:2014-05-10 18:21:25
【问题描述】:
我正在使用 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 解释为浮点数吗?
谢谢
【问题讨论】:
-
为什么不建立一个联合来将 char 数组与浮点数组对齐?
-
@Jim 你能提供一些细节吗?我是 C 的新手,所以我不习惯这种非常低级的东西。谢谢。
-
我刚刚发布了一个答案。
-
请注意,
memcpy(&f, b, sizeof f);是唯一解决方案,不对对齐/填充做任何假设。对于解包网络数据包和二进制文件格式,这是要走的路。 -
对于所有这些解决方案,请确保发送应用程序使用与 Arduino 相同的浮点表示。
标签: c pointers floating-point arduino memcpy