how to reading binary data...

marcos at nordesia.org marcos at nordesia.org
Thu Oct 21 04:07:56 EDT 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




More information about the Python-list mailing list