Question about binary file reading
sjmachin at lexicon.net
Thu Mar 5 01:37:30 CET 2009
On Mar 5, 10:51 am, "Rhodri James" <rho... at wildebst.demon.co.uk>
> On Wed, 04 Mar 2009 23:28:32 -0000, Tino Wildenhain <t... at wildenhain.de>
> > Rhodri James wrote:
> >> On Wed, 04 Mar 2009 22:58:38 -0000, vibgyorbits <bka... at gmail.com>
> >> wrote:
> >>> I'm writing a tool to do some binary file comparisons.
> >>> I'm opening the file using
> >>> fd=open(filename,'rb')
> >>> # Need to seek to 0x80 (hex 80th) location
> >>> fd.seek(0x80)
> >>> # Need to read just 8 bytes and get the result back in hex format.
> >>> x=fd.read(8)
> >>> print x
> >>> This prints out garbage. I would like to know what am i missing here.
> >> Your bytes are being interpreted as characters when you print the
> >> buffer, and the chance of them being meaningful text is probably small.
> >> Try the following:
> >> for b in x:
> >> print hex(ord(b))
> > better:
> > print x.encode("hex")
> Encodings make my head hurt :-) While there are programmatic purposes
> I'd leap at the "hex" encoder for, it doesn't make for the most human-
> readable output. I'll stick with the for loop, if you don't mind.
One byte per line??
>>> x = open('foo.xls', 'rb').read(8)
>>> ' '.join(z.encode('hex') for z in x)
'd0 cf 11 e0 a1 b1 1a e1'
>>> ' '.join(z.encode('hex') for z in x).upper()
'D0 CF 11 E0 A1 B1 1A E1'
More information about the Python-list