Próbuję użyć struct.unpack()
, aby rozebrać rekord danych zakończony łańcuchem ASCII.Rozpakowywanie zakończenia struct za pomocą ciągu ASCIIZ
Rekord (zdarza się TomTom ov2 zapis) ma następujący format (przechowywany mało endiany):
- 1 bajt
- 4 bajtów INT całkowitego rozmiaru danych (w tym tej dziedzinie)
- 4 bajt int
- 4 bajt int
- zmiennej długości ciąg zakończony zerem
unpack()
wymaga, aby długość napisu była uwzględniona w przekazanym przez niego formacie. Mogę użyć pola drugiego i znaną wielkość reszty rekordu - 13 bajtów - aby uzyskać długość naciągu:
str_len = struct.unpack("<xi", record[:5])[0] - 13
fmt = "<biii{0}s".format(str_len)
następnie przystąpić do pełnej rozpakowanie, ale ponieważ łańcuch jest zakończony zerem , Naprawdę chciałbym, aby zrobiło to dla mnie unpack()
. Byłoby również miło mieć to, czy powinienem uruchomić system, który nie zawiera własnego rozmiaru.
Jak mogę to zrobić?
Chociaż ja odpowiedział ten siebie, aby podzielić się rozwiązaniem, które wymyśliłem, chętnie bym zobaczył innych. –