将以字符表示的浮点数转换为浮点数(PYTHON)



我有一个python程序,我想在其中接收一个带有一些值的帧。这些值由xbee发送。

Xbee发送一个由union结构体拆分为4字节的float,如下所示:

typedef union _data{
    float f;
    char s[4];
} myFloat;

例如,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

请注意,这里我们没有得到确切的 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

最新更新