On Dec 13, 5:13 pm, "Diez B. Roggisch" <de...@nospam.web.dewrote:
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.