我实际上从温度传感器获得了一个值(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
答案 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 看似合理。如果没有,只需查看数据的含义并进行相应处理。