#struct #python-3.6
#структура #python-3.6
Вопрос:
Я работаю над проектом, который включает в себя использование struct
модуля и его pack/unpack
функций с python3.6
Я ссылался на многие статьи, подобные этой, и получил основную идею, но я не могу понять ее для своего варианта использования.
Например:
var = struct.pack('i',1)
print(var)
Это дает вывод b'x01x00x00x00'
, который я могу понять, потому что мы упомянули int как формат, и, следовательно, вывод имеет размер 4 байта.
Теперь еще один пример:
var = struct.pack('i', 1156888062)
Теперь в этом случае почему вывод b'xfexb5xf4D'
. Может кто-нибудь, пожалуйста, объяснить это.
Также, когда я его распаковываю
print(struct.unpack('f', var))
Почему результат (1957.687255859375,)
Комментарии:
1. Почему вы упаковываете его как целое число и распаковываете значение с плавающей точкой?
Ответ №1:
>>> struct.pack('i', 1156888062)
b'xfexb5xf4D'
Это все еще четыре байта, просто один из этих байтов является печатным символом ASCII D
, поэтому он отображается как это, а не как x44
. Это всего лишь другое представление. Доказательство:
>>> len(b'xfexb5xf4D')
4
>>> b'x44'
b'D'
Для последнего бита вам нужно unpack
использовать тот же спецификатор формата, который вы упаковали как. Вы просите интерпретировать те же четыре байта как число с плавающей запятой, поэтому, очевидно, это даст вам другой результат. Измените его на 'i'
, и он будет работать так, как ожидалось:
>>> struct.unpack('f', var)
(1957.687255859375,)
>>> struct.unpack('i', var)
(1156888062,)
Комментарии:
1. Я хочу, чтобы результат в формате float вот почему
f
используется.2. Что именно вы подразумеваете под «я хочу результат в float»? Вы ищете
1156880862.0
? Потому что одни и те же четыре байта интерпретируются какint
илиfloat
будут означать совершенно разные вещи.