struct.error: unpack 需要 4 个字节的缓冲区

Sat*_*tor 8 struct python-3.x

我想将设备中的数据从叮咬转换为浮动我使用此答案中的代码

要浮动的字节

import struct

byte_file = b'+001.80\r'
print(type(byte_file))

y = struct.unpack('f' , byte_file)
print(y)

Run Code Online (Sandbox Code Playgroud)

我明白了 struct.error: unpack requires a buffer of 4 bytes

正确的结果应该是1.80 我需要实现缓冲区参数吗?

For*_*Bru 5

struct用于二进制打包数据- 非人类可读的数据。b'+001.80\r'是 8 个字节长:b'+', b'0', b'0', b'1', b'.', ....

您可以decode使用它并使用float

>>> b'+001.80\r'.decode()
'+001.80\r'
>>> float(_)
1.8
>>> import struct
>>> struct.pack('f', _)
b'ff\xe6?'  # doesn't look anything like your data!
Run Code Online (Sandbox Code Playgroud)

但是,因为您的数据有 8 个字节长,您可以将其视为单double精度浮点值:

>>> struct.unpack('d', b'+001.80\r')
(3.711588247816385e-245,)
Run Code Online (Sandbox Code Playgroud)

但这将数据视为二进制打包:+001.80\r,也称为2b 30 30 31 2e 38 30 0d,是3.711588247816385e-245内存中的样子。