2009-10-06 12 views
5

Ich versuche, ein Perl-Skript in Python zu konvertieren, und es verwendet ziemlich viele verschiedene Pakete. Ich war in der Lage, die Unterschiede der Buchstaben in den "Templates" für jeden einzelnen herauszufinden, aber ich habe ein Problem damit, zu verstehen, wie man mit der fehlenden Längenangabe von Perl umgeht.Wie konvertiere ich Perls 'Nc *' - Format in struct.pack für Python?

Beispiel:

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

Ich habe keine Entsprechung für diesen "*" -Funktion in struct.pack sehen, auf Python. Irgendwelche Ideen, wie man das in Python umwandelt?

Antwort

7

Wie wäre das?

struct.pack('>I', some_integer) + struct.pack('b'*len(long_array), *long_array) 
+0

Ich mag Ihre Idee, alles in der pack() -Methode zu halten, aber ich bekomme "struct.error: pack erfordert genau x Argumente" und konnte es nicht zum Auspacken (kein Wortspiel beabsichtigt) das Array . – ewall

+0

@ewall: Es gab einen kleinen Tippfehler, den Code repariert. – abbot

1

Perls Pack verwendet das '*' - Zeichen, ähnlich wie in regulären Ausdrücken - was bedeutet, dass ein Platzhalter für mehr davon verwendet wird. Hier bedeutet es natürlich mehr signed ints.

In Python, würden Sie gerade Schleife durch die Zeichenfolge und Concat die Stücke:

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