Упаковка и распаковка значений с плавающей точкой в ​​python - PullRequest
1 голос
/ 26 октября 2019

Почему Python возвращает "нечетные значения", когда я пытаюсь упаковать объект float? Например:

>>> import struct,time

>>> struct.pack('d', time.time())
b'\xe0LC|\xf6l\xd7A'

>>> struct.unpack('d', b'\xe0LC|\xf6l\xd7A')
(1572067825.051567,)

Почему он распаковывает значение в виде кортежа, а не с плавающей точкой? И затем, почему он использует такие значения, как LC и | и l - я думал, что это будет упаковывать элементы в шестнадцатеричном формате?

1 Ответ

1 голос
/ 26 октября 2019

Документация unpack явно заявляет, что результатом является кортеж:

Распаковка из буфера буфера (предположительно, упакованного в pack (format, ...)) в соответствии с форматом строки формата. Результат - это кортеж , даже если он содержит ровно один элемент. Размер буфера в байтах должен соответствовать размеру, требуемому форматом, что отражено функцией calcsize ().

Вы можете увидеть представления всех возможных байтов с помощью:

for i in range(256):
    print("{} : {}".format(i, bytes([i])))

Например, 124 представлен b'|'. В вашем случае b'\xe0LC|\xf6l\xd7A' является представлением bytes([224, 76, 67, 124, 246, 108, 215, 65]).

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