[Tutor] Another parsing question

Alan Gauld alan.gauld at blueyonder.co.uk
Tue Mar 16 13:27:25 EST 2004


> I have inherited a project which writes some data to a file 
> in hexadecimal format as 0x11, 0x4, etc. The hex values are 
> pipe-delimited as so: 0x11|0x4|0x14 

Don't take this the wrong way, but it seems you really need to go 
back to basics on how information is stored and represented in 
computer systems. Most of your questions seem to be based on 
confusion between strings and binary formats.

> hex, but when I send the data that I have parsed out, I get 
> it sending the 0, the x, the 1, and another 1 instead of the 
> hex value for 0x11.

That's because you have parsed a string - ie a series of characters.
You want to send a series of bytes. You need to convert the 4 
byte character strings into single byte numbers. 
Try using the int() operaion:

>>> int('12')
>>> int('0x12',16)
>>> print "As hex: %0X" % int('0x12',16)
As hex: 12

Notice the hex is purely a representation thing. There is no 
real difference between hex 0x12 and decimal 18 (or even octal 22!)
They are just different string representations of the same 
underlying binary number.

Now you can send that binary number down the pipe:

for line in data_file.readlines():
    if len(line)>1:
       i=0   # I have no idea what you need the i for???
       for piece in tokens:
          port.write(int(piece,16)) # convert to number
          i = i + 1  # nor why you increment it here


Alan G.

More information about the Tutor mailing list