On Dec 13, 5:13 pm, "Diez B. Roggisch" <[EMAIL PROTECTED]> 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. -- http://mail.python.org/mailman/listinfo/python-list