어제 매우 간단한 바이너리 데이터 파일을 구문 분석해야했습니다. 규칙은 0xAA 인 행에서 2 바이트를 찾은 후 다음 바이트가 길이 바이트가 될 것이고 9 바이트를 건너 뛰고 주어진 양을 출력합니다 거기에서 데이터. 파일 끝까지 반복하십시오.간단한 FSM을 구현하는 Pythonic 방법은 무엇입니까?
내 솔루션이 제대로 작동하고 결합하기가 매우 빠르다. (비록 마음에 든 C 프로그래머 임에도 불구하고 여전히 C로 작성했을 때보 다 파이썬에서 이것을 작성하는 것이 더 빠르다고 생각한다.) -하지만 , 분명히 Pythonic이 아니며 C 프로그램처럼 읽습니다. (매우 좋은 것은 아닙니다!)
더 나은/더 Pythonic 한 접근 방법은 무엇입니까? 파이썬에서 이처럼 간단한 FSM이 올바른 선택일까요?
내 솔루션 :
#! /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"
나에게 잘 보입니다. 그게 내가 쓰는 방법이야. –
글쎄, 먼저 맥주 화산이 필요하고, 그럼 해적 복장이 필요해. 잠깐만, 여기서 어떤 FSM 얘기를하고 있니? –
피곤해야합니다. FSM을 Flying Spaghetti Monster로 계속 읽습니다. –