This is probably a newbie question, and I apologize for the length but I have
consulted several books / sites and havent found a good answer. I need to read
a file that is in binary format, and then convert some of the values into
integer values. These values can range from 1 to 4 bytes.
First question is there an easy way to do this? I finally wrote my own
little utility to handle multi-byte integers because I couldnt find a built-in
way (except for ord() which works only for single bytes)
def getnum(num_str):
"""
Given a string representing a binary number, return the number.
If string is more than one byte, calculate the number to return.
Assume that each byte is signed magnitude
"""
x = len(num_str)
ans = 0
for i in range( x ):
nextstr = num_str[i:i+1]
ans = ans * 256
ans = ans + ord(nextstr)
return ans
This brute force method usually works, but - now here is the other question
-sometimes the code does not pick up two full bytes when it is supposed to. I
open the file and read a block that I want into a string:
f=open(fname, 'rb')
f.seek(offset, 0)
block = f.read(2000)
Then for each number I pull the bytes from the string, then call getnum() to
calculate the number.
test = block[0:1] # 1 byte
test = block[1:4] # 3 bytes
test = block[4:6] # 2 bytes
test = block[20:12] # 2 bytes
test = block[1996:2000] #4 bytes
This method usually works, except that for some of the 2-byte numbers I get
only the first byte and first half of the second byte for instance: 'x06\x33
comes out as x063. This is very confusing especially because one 2-byte
substring 00 01 comes out as expected, but 06 52 becomes 065. Any ideas?
---------------------------------
Finding fabulous fares is fun.
Let Yahoo! FareChase search your favorite travel sites to find flight and hotel
bargains.
_______________________________________________
Tutor maillist - Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor