Как преобразовать формат пакета Perl 'Nc*' в struct.pack для Python?

Я пытаюсь преобразовать скрипт Perl в Python, и он использует довольно много разных пакетов. Мне удалось выяснить различия в надписях в «шаблонах» для каждого из них, но у меня возникла проблема с пониманием того, как обрабатывать объявление Perl об отсутствии длины.

пример:

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

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


person Valdemarick    schedule 06.10.2009    source источник


Ответы (2)


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

struct.pack('>I', some_integer) + struct.pack('b'*len(long_array), *long_array)
person abbot    schedule 06.10.2009
comment
Мне нравится ваша идея хранить все это внутри метода pack(), но я получаю struct.error: пакет требует ровно x аргументов и не может обмануть его для распаковки (без каламбура) массива. - person ewall; 06.10.2009

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

В Python вы просто прокручиваете строку и объединяете ее части:

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