如何转换b' \ xc8 \ x00'漂浮?

时间:2017-04-27 12:02:10

标签: python python-3.x floating-point type-conversion decode

我实际上从温度传感器获得了一个值(b'\xc8\x00')。我想将其转换为浮点值。是不是我需要解码呢?

这是我的功能:

def ToFloat(data):
    s = data.decode('utf-8')
    print(s)
    return s

但是当我尝试编译它时,我收到错误:

'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte

2 个答案:

答案 0 :(得分:2)

您似乎拥有打包字节而不是unicode对象。使用struct.unpack

In [3]: import struct
In [4]: struct.unpack('h', b'\xc8\x00')[0]
Out[4]: 200

格式h指定一个短值(2个字节)。如果您的温度值始终为正,则可以使用H表示无符号短语:

import struct

def to_float(data):
    return float(struct.unpack('H', data)[0])

答案 1 :(得分:0)

请注意,ToFloat()有点恼人,因为它返回一个浮点数,但将数据解释为整数值。如果字节表示浮点数,则有必要知道float以哪种格式打包到这两个字节中(通常float占用超过两个字节)。

data = b'\xc8\x00'
def ToFloat(data):
    byte0 = int(data[0])
    print(byte0)
    byte1 = int(data[1])
    print(byte1)
    number = byte0 + 256*byte1
    print(number)
    return float(number)    

返回: 200.0 看似合理。如果没有,只需查看数据的含义并进行相应处理。