Bir*_*ibu 2 python floating-point byte valueconverter
我在python中有一个程序,我希望在其中接收带有一些值的框架.该值由xbee发送.
Xbee发送一个由union结构分成4个字节的浮点数,如下所示:
typedef union _data{
float f;
char s[4];
} myFloat;
Run Code Online (Sandbox Code Playgroud)
所以例如,17.23给了我10,-41,-119,65.所以,我必须在python中恢复所有这些值,在我得到4之后,将它们转换成浮点数.自从我读取每个(serial.read())以获得浮点结果后,我该怎么办?
这些值将由python脚本接收,我想再次将它们加入浮点数.我在python中读到了关于struct的内容但是我不是很好的python技巧,我不明白它是如何工作的.
我使用serial.read逐个读取字节.
任何的想法?
如果我理解正确的话,你得到的是四个整数[10, -41, -119, 65],你想把它们重新组装成原来的浮点数.如果是这样,答案已包含在@ DSM的评论中.将这些位拼凑在一起:
>>> import struct
>>> x = [10, -41, -119, 65]
>>> struct.unpack('<f', struct.pack('4b', *x))[0]
17.229999542236328
Run Code Online (Sandbox Code Playgroud)
请注意,我们并没有完全 17.23在这里,因为这个数字不能完全表示为单精度IEEE 754二进制浮点数.
但这听起来有点颠覆:它应该更容易获得原始字节以获得4个整数.你究竟得到整数值的原因是什么?如果你正在使用pyserial,你不能一次read(4)只获取4个字节,然后struct.unpack直接使用它的结果吗?例如,我希望这样的东西能够工作(模拟翻译会话):
>>> import struct
>>> x_bytes = ser.read(4) # (where ser is your Serial instance)
>>> x = struct.unpack('<f', x_bytes)[0]
>>> x
17.229999542236328
Run Code Online (Sandbox Code Playgroud)