2011-10-04 12 views
5

Tengo un archivo codificado en un patrón extraño. Por ejemplo,El archivo no está decodificado correctamente

Char (1 byte) | Entero (4 bytes) | Doble (8 bytes) | etc ...

Hasta ahora, escribí el siguiente código, pero no he podido averiguar por qué todavía muestra basura en la pantalla. Cualquier ayuda será apreciada.

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 

Respuesta

6

read() devuelve una cadena, lo que necesita para decodificar para obtener los datos binarios. Puede usar el módulo struct para realizar la decodificación.

Algo a lo largo de las siguientes líneas debe hacer el truco:

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

Puede que tenga que hacer frente a cuestiones endianness, pero struct hace que pretty easy.

+0

Creo que el último campo es un char: 'fmt = 'cidc'' –

+0

@StevenRumbalski: Esto no fue un ejemplo completo. Solo mostrando la idea ... – NPE

+0

Genial. Gracias por la respuesta. Además, soy un novato en Python; Le agradecería mucho si pudiera ahondar en su observación. – Peretz

0

Sería útil mostrar el contenido del archivo, así como la "basura" que está generando.

input.read() devuelve una cadena, por lo que debe convertir lo que está leyendo al tipo que desea. Sugiero buscar en el módulo struct.

Cuestiones relacionadas