2009-10-06 14 views
5

Estoy tratando de convertir una secuencia de comandos de Perl a python, y utiliza bastantes paquetes diferentes. He podido descifrar las diferencias de letras en las "plantillas" para cada una, pero estoy teniendo problemas para entender cómo manejar la falta de declaración de longitud de Perl.¿Cómo convierto el formato 'Nc *' del paquete de Perl a struct.pack para Python?

ejemplo:

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

no veo un análogo de este "*" en función de struct.pack, en Python. ¿Alguna idea sobre cómo convertir esto a Python?

Respuesta

7

¿Qué tal esto?

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

me gusta su idea del método de mantener todo el interior del envase(), pero me sale "struct.error: paquete requiere exactamente x argumentos" y no podía engañar en el desembalaje (sin doble sentido) la matriz . – ewall

+0

@ewall: hubo un pequeño error tipográfico, se corrigió el código. – abbot

1

El paquete de Perl usa el carácter '*' similar a las expresiones regulares, lo que significa un comodín para más de lo mismo. Aquí, por supuesto, significa más entradas firmadas.

En Python, que acababa de bucle a través de la cadena y concat las piezas:

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