2011-10-04 119 views
5

我有一个奇怪的模式编码的文件。例如,文件没有正确解码

Char(1字节)|整数(4字节)|双(8字节)|等等...

到目前为止,我写了下面的代码,但我一直无法弄清楚为什么仍然在屏幕上显示垃圾。任何帮助将不胜感激。

BRK_File = 'commands.BRK' 
input = open(BRK_File, "rb") 

rev = input.read(1) 
filesize = input.read(4) 
highpoint = input.read(8) 
which = input.read(1) 

print 'Revision: ', rev 
print 'File size: ', filesize 
print 'High point: ', highpoint 
print 'Which: ', which 

while True 
    opcode = input.read(1) 
    print 'Opcode: ', opcode 
    if opcode = 120: 
     break 
    elif 
     #other opcodes 

回答

6

read()返回一个字符串,您需要解码才能获取二进制数据。您可以使用struct模块进行解码。

东西沿着以下行应该做的伎俩:

import struct 
... 
fmt = 'cid' # char, int, double 
data = input.read(struct.calcsize(fmt)) 
rev, filesize, highpoint = struct.unpack(fmt, data) 

您可能需要处理字节排列顺序问题,但struct使得该pretty easy

+0

我相信最后一个字段是char:'fmt ='cidc'' –

+0

@StevenRumbalski:这不是一个完整的例子。只是显示这个想法... – NPE

+0

太棒了。感谢你的回答。另外,我是Python的新手,如果你能进一步研究他的观察,我将不胜感激。 – Peretz

0

显示文件的内容以及输出的“垃圾”会有帮助。

input.read()返回一个字符串,所以你必须将你正在阅读的内容转换为你想要的类型。我建议看看struct模块。