James
James

Reputation: 327

unpack syntax in python 3

I am trying to convert hex numbers into decimals using unpack. When I use:

from struct import *
unpack("<H",b"\xe2\x07")

The output is: 2018, which is what I want. The thing is I have my hex data in a list as a string in the form of:

asd = ['e2','07']

My question is is there a simple way of using unpack without the backslashes, the x? Something like so:

unpack("<H","e207")

I know this doesn't work but I hope you get the idea.

For clarification I know I could get the data in the form of b'\x11' in the list but then it's interpreted as ASCII, which I don't want, that's why I have it in the format I showed.

Upvotes: 2

Views: 2895

Answers (1)

wim
wim

Reputation: 362657

You have hex-encoded data, in a text object. So, to go back to raw hex bytes, you can decode the text string. Please note that this is not the usual convention in Python 3.x (generally, text strings are already decoded).

>>> codecs.decode('e207', 'hex')
b'\xe2\x07'

A convenience function for the same thing:

>>> bytes.fromhex('e207')
b'\xe2\x07'

Now you can struct.unpack those bytes. Putting it all together:

>>> asd = ['e2','07']
>>> text = ''.join(asd)
>>> encoded = codecs.decode(text, 'hex')
>>> struct.unpack("<H", encoded)
(2018,)

Upvotes: 2

Related Questions