передача большого количества аргументов в struct.pack - PullRequest
1 голос
/ 22 декабря 2010

Я использую метод struct.pack, который принимает переменное число аргументов.Я хочу преобразовать строку в байты.Если строка короткая (например, «имя»), я могу сделать это следующим образом:

bytes = struct.pack('4c','n','a','m','e')

Но что делать, если длина моей строки составляет 80 символов?

Я пробовал строку формата's' вместо '80c' для struct.pack, но результат не такой, как в предыдущем вызове.

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Используйте «80-е», а не только «s».Входные данные представляют собой одну строку, а не последовательность символов.то есть

bytes = struct.pack('4s','name')

Обратите внимание, что если вы укажете длину, превышающую длину входа, выход будет дополнен нулями.

1 голос
/ 22 декабря 2010

Это не имеет особого смысла.Строки уже являются байтами в Python 2.x;Таким образом, вы можете просто сделать:

my_string = 'I am some big string'
my_bytes = my_string

В Python 3 строки по умолчанию являются объектами Unicode.Чтобы получить байты, вы должны закодировать строку.

my_bytes = my_string.encode('utf-8')

Если вы действительно хотите использовать struct.pack, вы бы использовали * syntax как , описанное в руководстве :

my_bytes = struct.pack('20c', *my_string)

или

my_bytes = struct.pack('20s', my_string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...