2009-10-06 13 views
5

Próbuję przekonwertować skrypt Perla na Pythona i używa on kilku różnych pakietów. Udało mi się znaleźć różnice w literach w "szablonach" dla każdego z nich, ale mam problem ze zrozumieniem, jak radzić sobie z brakiem deklaracji długości Perla.Jak przekonwertować format pakietu Perla 'Nc * na struct.pack dla Pythona?

przykład:

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

Nie widzę w tym analogu "*" funkcji w struct.pack na Pythonie. Wszelkich pomysłów, jak przekonwertować to do Pythona?

Odpowiedz

7

Jak chodzi?

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

Lubię swój pomysł utrzymywania wszystko wewnątrz opakowania() metoda, ale pojawia się „struct.error: paczka wymaga dokładnie x argumentów” i nie mógł oszukać go do rozpakowywania (gra słów nie przeznaczonych) tablicę . – ewall

+0

@wall: pojawiła się mała literówka, naprawiono kod. – abbot

1

Pakiet Perla używa znaku "*", podobnie jak w wyrażeniach regularnych - co oznacza symbol wieloznaczny, aby uzyskać więcej tego samego. Tutaj, oczywiście, oznacza to więcej podpisanych int.

W Pythonie, to po prostu pętli łańcucha i concat kawałków:

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