Estoy tratando de usar struct.unpack()
para desarmar un registro de datos que finaliza con una cadena ASCII.Desempaquetar una estructura que termina con una cadena ASCIIZ
El registro (que pasa a ser un TomTom ov2 registro) tiene este formato (almacenado ascendente hacia la izquierda):
- 1 byte
- 4 bytes int para el tamaño total del registro (incluyendo este campo)
- 4 byte int
- 4 byte int
- cadena de longitud variable, terminada en nulo
unpack()
requiere que la longitud de la cadena se incluya en el formato que la pasa. Puedo usar el segundo campo y el tamaño conocido del resto del registro - 13 bytes - para obtener la longitud de la cadena:
str_len = struct.unpack("<xi", record[:5])[0] - 13
fmt = "<biii{0}s".format(str_len)
luego proceder con el desembalaje completo, pero ya que la cadena está terminada en cero , Realmente desearía que unpack()
lo hiciera por mí. También sería bueno tener esto si me topa con una estructura que no incluye su propio tamaño.
¿Cómo puedo lograrlo?
Aunque he respondido a esta a mí mismo para compartir la solución que se me ocurrió, me gustaría ver a los demás. –