我正在创建一个应用程序,它将arduino(使用Xbee传输)的浮点值发送到Java中的应用程序(使用Xbee接收) . 问题是,当我用Java接收数据时,我无法将其转换为我存储在xbee数据包中的原始浮点数 .
这就是我的意思,
Arduino的:
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)
我想知道如何从位置数据[7]和数据[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
2 回答
如果你还需要ir:
在Arduino:
在Java中:
这个对我有用
根据你的float to uint_8转换方法使用ByteOrder.BIG_ENDIAN,ByteOrder.LITTLE_ENDIAN或ByteOrder.nativeOrder() .