Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: how to reading binary data...

Reply
Thread Tools

Re: how to reading binary data...

 
 
marcos@nordesia.org
Guest
Posts: n/a
 
      10-21-2004
## I hope this code could help you.

def readLong(fin):
"""Reads next long from file"""
s = fin.read(4)

if len(s) == 0: # test reaching of end of file
raise Exception("END-OF-FILE")
return str2long(s)

# First element of this list, is the index in a 4 byte string of the
most-significative-byte, second is the second most-significative and so
on.
SIGNIFICANCE = [0,1,2,3] # this list is useful when reading bigendian longs
#SIGNIFICANCE = [3,2,1,0] # this list is useful when reading littleendian
longs

def str2long(s):
"""Returns a long, using the first four byte of a string"""
l = 0L # the long we will get
for pos in SIGNIFICANCE: # get each byte in the order specified by the
significance list
if pos < len(s):
c = s[pos]
else: # if we take a byte that is not in byte string (this happens at
the end of file when file length is not multiple of 4.
c = chr(0)

l*=0x100 # shift left 8 bits
l+=ord(c) # add the readed byte at the LSB.

return l

#Testing
fi = open("name-of-file","rb")
run = 1
while run:
try:
print hex(readLong(fi))
except Exception:
run=0
fi.close()


Regards, marcos.



>
> Hello
>
> I opened any particular file with the 'rb' mode that is read binary mode.
> so python will treat the data as a raw data. now i want to read first 4
> bytes only then i will convert the first 4 bytes into long datatype and
> then again read 4 bytes and will do the same.
> But how to set & move the pointer using loop?
> also how to convert into long?
>
> Regards
> Sandeep
>
> --
> http://mail.python.org/mailman/listinfo/python-list


 
Reply With Quote
 
 
 
 
Peter Hansen
Guest
Posts: n/a
 
      10-21-2004
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> SIGNIFICANCE = [0,1,2,3] # this list is useful when reading bigendian longs
> #SIGNIFICANCE = [3,2,1,0] # this list is useful when reading littleendian
> longs
>
> def str2long(s):
> """Returns a long, using the first four byte of a string"""
> l = 0L # the long we will get
> for pos in SIGNIFICANCE: # get each byte in the order specified by the
> significance list
> if pos < len(s):
> c = s[pos]
> else: # if we take a byte that is not in byte string (this happens at
> the end of file when file length is not multiple of 4.
> c = chr(0)
>
> l*=0x100 # shift left 8 bits
> l+=ord(c) # add the readed byte at the LSB.
>
> return l


Ditch this! It would be much easier, faster,
more maintainable to use the struct module:

struct.unpack('<l', four_byte_string)

This returns an integer from little-endian data, while
using >l assumes big-endian data.

-Peter
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
(8-bit binary to two digit bcd) or (8-bit binary to two digit seven segment) Fangs VHDL 3 10-26-2008 06:41 AM
writing binary file (ios::binary) Ron Eggler C++ 9 04-28-2008 08:20 AM
A 64-bit binary returning a value to a 32-bit binary? spammenotplui31@yahoo.ca C Programming 12 04-08-2007 07:02 AM
Re: ostreams, ios::binary, endian, mixed binary-ascii Marc Schellens C++ 8 07-15-2003 12:27 PM



Advertisments