[Tutor] Struct the solution for Hex translation

Alan Gauld alan.gauld at btinternet.com
Mon Feb 19 16:04:21 CET 2007


"Johan Geldenhuys" <johan at accesstel.co.za> wrote 

> The first two bytes of the data is a 16 bit value. Eg: "\xe2\x01'
> 
> I can the first byte into binary if I use 'e2', but I don't know 
> how to get the '\x' out of the first byte to use it in python. 

Are you sure it is there?
Usually the \x is only part of the repr string, its not actually 
in the data. What do you get is you do:

byte = data[0]  # get the first byte
print len(byte)   # should only be one byte
print byte     # should get '\xe2' or whatever.

> My data has the '\x' and all I need is the 'e2'.

If you do have the \xe2  that implies you have 4 characters, 
ie 4 bytes, so to get the real value use int(data[2:],16)

> Any advice of the usage of the struct module or how 
> I can get rid of the '\x' in my data?

I'm not sure where the struct module comes in? Are 
you using struct to read the data? If so you should be 
able to use unpack the data into the format you need 
by specifying a format string.

eg

struct.unpack('cc5s',data)

Should return two characters(bytes) and a 98 character 
string. Like so:

>>> struct.unpack('cc5s','\x12\x23abcde')
('\x12', '#', 'abcde')
>>>

Is that what you want?
Notice that the first value is actially a single byte of 
value 12 hex. The \x are only in the display.

The >>> prompt is a great place to experiment with struct
format strings etc.

HTH,

-- 
Alan Gauld
Author of the Learn to Program web site
http://www.freenetpages.co.uk/hp/alan.gauld



More information about the Tutor mailing list