2011-10-04 30 views
5

Tôi có tệp được mã hóa theo kiểu lạ. Ví dụ:Tệp không được giải mã đúng cách

Char (1 byte) | Số nguyên (4 byte) | Đôi (8 byte) | vv ...

Cho đến nay, tôi đã viết mã bên dưới, nhưng tôi đã không thể tìm ra lý do tại sao vẫn hiển thị rác trong màn hình. Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào.

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 

Trả lời

6

read() trả về một chuỗi mà bạn cần giải mã để nhận dữ liệu nhị phân. Bạn có thể sử dụng mô-đun struct để thực hiện giải mã.

Something dọc theo dòng sau đây sẽ làm các trick:

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

Bạn có thể phải đối phó với các vấn đề endianness, nhưng struct làm cho rằng pretty easy.

+0

Tôi tin rằng trường cuối cùng là char: 'fmt = 'cidc'' –

+0

@StevenRumbalski: Đây không phải là ví dụ hoàn chỉnh. Chỉ hiển thị ý tưởng ... – NPE

+0

Tuyệt vời. Cảm ơn câu trả lời. Ngoài ra, tôi là một newbie trong python; Tôi sẽ đánh giá rất cao nếu bạn có thể tiếp tục nghiên cứu kỹ hơn. – Peretz

0

Sẽ rất hữu ích khi hiển thị nội dung của tệp, cũng như "rác" mà nó xuất ra.

input.read() trả về một chuỗi, vì vậy bạn phải chuyển đổi những gì bạn đang đọc thành loại bạn muốn. Tôi khuyên bạn nên xem xét mô-đun struct.

Các vấn đề liên quan