determining bytes read from a file.

vineeth nvineeth at gmail.com
Thu Dec 13 07:33:26 EST 2007


On Dec 13, 5:13 pm, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
> vineeth wrote:
> > Hello all,
> >    I have come across a weird problem, I need to determine the amount
> > of bytes read from a file, but couldn't figure it out ,
> >    My program does this :
> > __
> >    file = open("somefile")
> >    data = file.read()
> >    print "bytes read ", len(data)
> > ---
>
> >   But the bytes read is not being printed correctly, I think bytes are
> > being counted only till the first occurance of '\0' is encountered.
> > Even though the file is of a very large size, the bytes till the first
> > '\0' are counted.
>
> I doubt that. Python doesn't interpret data when reading, and byte-strings
> don't have a implicit 0-based length.
>
> So I think you must be doing something different - clearly the above is not
> actual code, but something made up for this post. Show us your actual code,
> please.
>
> diez

Hi,
 The program tries to create a C Byte array of HEX data from a binary
input file (for ex : to embed a .png image with the application as an
array),
 Here is the program :

"""
python script to create a bit stream of a input binary file.
Usage : bit_stream_creator.py -i input_file -b bytes_to_dump
"""

import sys
from binascii  import hexlify
from optparse import OptionParser

if len(sys.argv) != 5:
	print "incorrect args, usage : %s -i input_file -b bytes_to_dump" %
(sys.argv[0])
	sys.exit(0)

parser = OptionParser()
parser.add_option("-i", "--input", dest="inputfilename")
parser.add_option("-b", "--bytes", dest="bytes")

(options, args) = parser.parse_args()

print "-i",options.inputfilename
print "-b",options.bytes

# open input file
infile = open(options.inputfilename)

# create the member variable name.
mem_var_name = options.inputfilename
mem_var_name = mem_var_name.replace(' ','_')
mem_var_name = mem_var_name.replace('.','_')

outfile_c = open(mem_var_name + ".c","w")
outfile_h = open(mem_var_name + ".h","w")

# read the data.
print " Reading %d bytes..... " % (int(options.bytes))
bytes_reqd = int(options.bytes)
data = infile.read(bytes_reqd)
print "Bytes Read ", len(data)

# convert to hex decimal representation
hex_data = hexlify(data)
i = 0

# Write the c file with the memory dump.
outfile_c.write ( "unsigned char %s[%d] = {\n" %
(mem_var_name,bytes_reqd) )
while i < len(hex_data):
	outfile_c.write( "0x%c%c" % ( hex_data[i],hex_data[i+1] ) )
	i += 2
	if i != len(hex_data):
		outfile_c.write(",")
	if i % 32 == 0:
		outfile_c.write("\n")
outfile_c.write ( "\n};\n" )

# Write the .h file with forward declaration.
cpp_macro = "__"+mem_var_name.upper()+"_H__"
outfile_h.write("#ifndef "+cpp_macro + "\n")
outfile_h.write("#define "+cpp_macro + "\n")
outfile_h.write( "//%s, size %d \n" % (mem_var_name,len(data)) )
outfile_h.write( "extern unsigned char %s[%d];\n" %
(mem_var_name,bytes_reqd) )
outfile_h.write("#endif //"+cpp_macro + "\n")

#close the files.
outfile_c.close()
outfile_h.close()
infile.close()


________

But len(data) never proceeds beyond the NULL character.

Any help and tips is appreciated.

Thanks and Regards,
Vineeth.



More information about the Python-list mailing list