2009-10-06 10 views
5

Я пытаюсь преобразовать Perl-скрипт в python, и он использует довольно много разных пакетов. Мне удалось выяснить отличительные черты в шаблонах для каждого из них, но у меня возникла проблема с пониманием того, как обрабатывать отсутствие длины объявления Perl.Как преобразовать формат пакета «Nc *» Perl в struct.pack для Python?

пример:

pack('Nc*',$some_integer,$long_array_of_integers); 

Я не вижу аналог этого "*" особенность в struct.pack на Python. Любые идеи о том, как преобразовать это в Python?

ответ

7

Как насчет этого?

+0

Мне нравится ваша идея сохранить все это внутри метода pack(), но я получаю: «struct.error: pack требует ровно x аргументов» и не мог обмануть его в распаковке (без каламбура) , – ewall

+0

@ewall: была небольшая опечатка, исправлен код. – abbot

1

В пакете Perl используется символ '*', аналогичный регулярным выражениям, что означает подстановочный знак для большего количества. Здесь, конечно, это означает больше подписанных ints.

В Python, вы бы просто цикл через строку и CONCAT частей:

result = struct.pack('>L', some_integer) 
for c in long_array_of_integers: 
    result += struct.pack('b',c)