【发布时间】:2016-07-05 19:47:07
【问题描述】:
我正在制作一个应用程序,它将浮点值从 arduino(使用 Xbee 传输)发送到 Java 应用程序(使用 Xbee 接收)。 问题是当我接收到 Java 中的数据时,我无法将其转换为存储在 xbee 数据包中的原始浮点数。
这就是我所拥有的,
阿杜诺:
uint8_t* data;
float value = (voltage*100)/5;
data = (uint8_t*)(&value);
for(int i = 0; i<sizeof(data); i++) Serial.println(data[i]):
Serial.println(*((float*)(data)));
这里我取浮点值并将其作为字节存储在数据数组中。例如,对于值 22.66,我在第一次打印中得到的是值 0 和 72(存储浮点值后数据大小为 2)。第二次打印得到 22.66。所以看起来值存储正确。
之后,我将数据以 Xbee 数据包的形式发送到 Java,然后我在 Java 中得到这样的数据:
XBeeResponse response = xbee.getResponse(2000);
int[] data = response.getProcessedPacketBytes();
System.out.println(data[7] + " " + data[8]); //these positions contain the values stored in arduino -> data[7] = 0 and data[8] = 72)
我想知道如何从位置 data[7] 和 data[8] 中获取 java 中的值 22.66。 我尝试了一些类似的方法:
int value = (data[7]) | (data[8]<<8);
float valuef = Float.intBitsToFloat(value);
但是没有用。
有人知道我该怎么做吗?
谢谢!
PS:如果有帮助,我在 java 和 arduino 中使用以下 xbee 库: https://github.com/andrewrapp/xbee-api https://github.com/andrewrapp/xbee-arduino
【问题讨论】:
-
你应该使用
sizeof(value),这将是4个字节。