2016-02-08 4 views
2

Я не могу понять, когда следует использовать функции pack и unpack в библиотеке struct в python? Я также не могу понять, как их использовать? Прочитав об этом, я понял, что они используются для преобразования данных в двоичные. Однако, когда я запускаю несколько примеров, например:Когда/почему я должен использовать библиотеку struct в python для упаковки и распаковки?

>>> struct.pack("i",34) 
'"\x00\x00\x00' 

Я не могу исправить это. Я хочу понять его цель, как происходят эти преобразования, что означает «\ x» и другие символы/означают и как работает распаковка.

+0

Есть ли что-то не так с информацией и примерами в документации на Python? См. Https://docs.python.org/2/library/struct.html?highlight=struct#module-struct. – barny

ответ

2

Я не могу понять, когда следует использовать функции pack и unpack в библиотеке struct в python?

Тогда у вас, вероятно, нет причин использовать их.

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

Однако, когда я запускаю некоторые примеры, как:

>>> struct.pack("i",34) 
'"\x00\x00\x00' 

Я не могу сделать какой-то смысл из него.

\x обозначения для представления отдельных байтов вашего bytes объекта с помощью hexadecimal. \x00 означает, что значение байта, составляет 0, \x02 означает значение этого байта составляет 2, \x10 означает, что данное значение байта составляет 16 и т.д. " является байтами 34, таким образом, мы видим " вместо \x22 в этом представлении строки, но '\x22\x00\x00\x00' и '"\x00\x00\x00' - это те же строки

http://www.swarthmore.edu/NatSci/echeeve1/Ref/BinaryMath/NumSys.html может помочь вам с некоторым фоном, если это тот уровень, который вам нужен для понимания чисел.

+0

Спасибо. Можете ли вы объяснить мне, почему он используется в сети при отправке данных с одного компьютера на другой? Почему мы не отправляем только обычный текст? И почему мы видим '' 'вместо' \ x22 '(я знаю, что он представляет собой код ASCII, но что такое целочисленное представление имеет отношение к' '')? – shiva

+0

@shiva. Многие протоколы - это необработанные данные, а не текст, потому что они могут быть меньше и быстрее отправлять такие вещи. В наши дни текстовые форматы очень распространены, чем раньше, но, конечно, не распространены для очень высокопроизводительных материалов. –

+0

@shiva. Для удобства легко представляемые символы представлены в байтах по их буквам ASCII, а не только по их числам. Так как 0x22 соответствует '' ', Python просто использует' '', так как 0x71 отображает 'q', Python будет отображать строку' '\ x71" 'как' 'q" '. http://nedbatchelder.com/text/unipain.html может предоставить вам некоторую ориентацию относительно того, как работают строки. –

Смежные вопросы