struct.error: для распаковки требуется буфер 4 байта - PullRequest
1 голос
/ 24 февраля 2020

Я хочу преобразовать данные с устройства из укусов в плавающее. Я использую код из этого ответа

байт для плавающего

import struct

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

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

Я получаю это struct.error: unpack requires a buffer of 4 bytes

Правильный результат должен быть 1.80 мне нужно реализовать буферный аргумент?

1 Ответ

0 голосов
/ 24 февраля 2020

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!

Однако , потому что ваш данные имеют длину 8 байт, вы можете рассматривать их как одно значение с плавающей точкой точности double:

>>> struct.unpack('d', b'+001.80\r')
(3.711588247816385e-245,)

Но это обрабатывает данные как двоичные: +001.80\r, также известный как 2b 30 30 31 2e 38 30 0d, как выглядит 3.711588247816385e-245 в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...