昨天我需要解析一个非常简单的二进制数据文件 - 规则是,查找连续两个字节都是0xAA的位置,接着下一个字节将是长度字节,然后跳过9个字节并输出从那里给出的数据量。重复执行直到文件末尾。
我的解决方案确实有效,并且很快就能完成(尽管我本质上是一名C程序员,但我仍然认为用Python编写比用C编写更快)- 但是,它显然不够Pythonic,并且读起来像一个C程序(而且还不是一个很好的C程序!)
有没有更好/更符合Pythonic的方法?在Python中使用这种简单的自动机是否仍然是正确的选择?
我提供的解决方案:
#! /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"