2011-10-04 18 views
5

Ho un file codificato in uno strano motivo. Ad esempio,Il file non viene decodificato correttamente

Char (1 byte) | Intero (4 byte) | Doppio (8 byte) | ecc ...

Finora, ho scritto il codice qui sotto, ma non sono stati in grado di capire il motivo per cui ancora mostra spazzatura nella schermata. Qualsiasi aiuto sarà molto apprezzato.

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 

risposta

6

read() restituisce una stringa, che è necessario per decodificare per ottenere i dati binari. È possibile utilizzare il modulo struct per eseguire la decodifica.

Qualcosa secondo le seguenti linee dovrebbe fare il trucco:

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

Potrebbe essere necessario affrontare le questioni endianness, ma struct fa che pretty easy.

+0

Credo che l'ultimo campo sia un carattere: 'fmt = 'cidc'' –

+0

@StevenRumbalski: Questo non è stato inteso come un esempio completo. Sto solo mostrando l'idea ... – NPE

+0

Grande. Grazie per la risposta. Inoltre, sono un principiante in python; Apprezzerei molto se tu potessi approfondire ulteriormente la sua osservazione. – Peretz

0

Sarebbe utile mostrare il contenuto del file, oltre alla "garbage" che sta emettendo.

input.read() restituisce una stringa, quindi è necessario convertire ciò che si sta leggendo nel tipo desiderato. Suggerisco di esaminare il modulo struct.

Problemi correlati