Hier, j'ai dû analyser un fichier de données binaires très simple - la règle est de chercher deux octets dans une rangée qui sont tous les deux 0xAA, alors l'octet suivant sera un octet de longueur, puis sauter 9 octets données à partir de là. Répétez jusqu'à la fin du fichier.Quelle est la méthode Pythonic pour implémenter un FSM simple?
Ma solution a fonctionné, et a été très rapide à mettre en place (même si je suis un programmeur C dans l'âme, je pense toujours qu'il était plus rapide pour moi d'écrire ceci en Python qu'en C) - MAIS , il est clairement pas du tout Pythonic et il se lit comme un programme C (et pas un très bon à cela!)
Quelle serait une meilleure approche de Pythonic? Est-ce qu'un simple FSM comme ça est encore le bon choix en Python?
Ma solution:
#! /usr/bin/python
import sys
f = open(sys.argv[1], "rb")
state = 0
if f:
for byte in f.read():
a = ord(byte)
if state == 0:
if a == 0xAA:
state = 1
elif state == 1:
if a == 0xAA:
state = 2
else:
state = 0
elif state == 2:
count = a;
skip = 9
state = 3
elif state == 3:
skip = skip -1
if skip == 0:
state = 4
elif state == 4:
print "%02x" %a
count = count -1
if count == 0:
state = 0
print "\r\n"
Cela me semble bien. C'est comme ça que je les écris. –
Eh bien, d'abord vous avez besoin d'un volcan de bière, puis de préférence une tenue de pirate ... Attendez, de quoi FSM parlons-nous ici? –
Je dois être fatigué; Je continue à lire FSM comme Flying Spaghetti Monster. –