2015-11-02 5 views
1

Извините за глупый вопрос, но,Что именно делает python struct.pack?

Я прочитал документацию и все еще могу понять, что эта функция делает:

struct.pack('<L',0x01D1F23A) 

Может кто-то объяснить очень детский и подробный образ, что эта функция будет делать для данный вход и для других входов.

Когда я печатаю вывод, я получил «: ≥╤☺», ASCII-представление шестнадцатеричных значений, так что в основном, как struct.pack висит шестнадцатеричное значение рядом с тем, что он превращает его в маленький конец. Как он хранится в памяти? Я не понял, что это значит «упаковать».

Спасибо.

+0

Э? Это только «hex», в то время как текст в файле конфигурации; как только он разобран, это собственное двоичное число, которое передается вызову 'pack(). –

+0

Это не ASCII; Я не уверен, что кодировка будет отображать, например, «F2» в ≥. – chepner

ответ

2

Возвращаемое значение этого байта (в Python 3) или стандартная (не-unicode) строка в Python 2, показывающая 0x01D1F23A, представленную как unsigned long в порядке байтов младшего порядка.

Это «упакованный», поскольку он хранится как необработанный двоичный контент - то же самое содержимое, которое у вас было бы с родным беззнаковым длинным типом, хранящимся в памяти на платформе little-endian.

The byte order is specified by the <, и the unsigned-long type is specified by the L.

Это полезно, если вы пытаетесь написать файл, сетевой пакет или другой контент в бинарном формате.

1

Это занимает несколько кусков данных (в вашем случае, одна часть, L - 4-байтовое целое число) и помещает их в байтовой строки

>>> struct.pack('<L', 0x01D1F23A) == b'\x3A\xF2\xD1\x01' 
True 

Ваше замешательство может исходить из нескольких источников