Splitting a hexadecimal string into a list in Python - How?

If I have this line:

hexstring = '001122334455'

How can I split this into a list so that the result:

hexlist = ['00', '11', '22', '33', '44', '55']

I can't think of a good, pythonic way to do this: /

+3
source share
7 answers
>>> [hexstring[i:i+2] for i in range(0,len(hexstring), 2)]
['00', '11', '22', '33', '44', '55']
+10
source

As an alternative:

>>> hexstring = "01234567"
>>> it=iter(hexstring); [a+b for a,b in zip(it, it)]
['01', '23', '45', '67']

Use itertools.izipinstead zipif you are targeting Python 2.x.

This method is the specific version grouperin the itertools recipe.


Some micro tests:

$ python2.6 -m timeit -s 'hexstring = "01234567"*500' '[hexstring[i:i+2] for i in xrange(0,len(hexstring), 2)]'
1000 loops, best of 3: 409 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"*500' '[hexstring[i:i+2] for i in range(0,len(hexstring), 2)]'
1000 loops, best of 3: 438 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"*500' 'it=iter(hexstring); [a+b for a,b in zip(it, it)]'
1000 loops, best of 3: 526 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"*500; from itertools import izip' 'it=iter(hexstring); [a+b for a,b in izip(it, it)]'
1000 loops, best of 3: 406 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"*500; import re; r=re.compile(".{1,2}"); f=r.findall' 'f(hexstring)'
1000 loops, best of 3: 458 usec per loop

$ python3.1 -m timeit -s 'hexstring = "01234567"*500' '[hexstring[i:i+2] for i in range(0,len(hexstring), 2)]'
1000 loops, best of 3: 756 usec per loop

$ python3.1 -m timeit -s 'hexstring = "01234567"*500' 'it=iter(hexstring); [a+b for a,b in zip(it, it)]'
1000 loops, best of 3: 414 usec per loop

$ python3.1 -m timeit -s 'hexstring = "01234567"*500; import re; r=re.compile(".{1,2}"); f=r.findall' 'f(hexstring)'
1000 loops, best of 3: 865 usec per loop


$ python2.6 -m timeit -s 'hexstring = "01234567"' '[hexstring[i:i+2] for i in xrange(0,len(hexstring), 2)]'
1000000 loops, best of 3: 1.52 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"' '[hexstring[i:i+2] for i in range(0,len(hexstring), 2)]'
1000000 loops, best of 3: 1.76 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"' 'it=iter(hexstring); [a+b for a,b in zip(it, it)]'
100000 loops, best of 3: 3.78 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"; from itertools import izip' 'it=iter(hexstring); [a+b for a,b in izip(it, it)]'
100000 loops, best of 3: 2.39 usec per loop

$ python2.6 -m timeit -s 'hexstring = "01234567"; import re; r=re.compile(".{1,2}"); f=r.findall' 'f(hexstring)'
1000000 loops, best of 3: 1.45 usec per loop

$ python3.1 -m timeit -s 'hexstring = "01234567"' '[hexstring[i:i+2] for i in range(0,len(hexstring), 2)]'
100000 loops, best of 3: 2.46 usec per loop

$ python3.1 -m timeit -s 'hexstring = "01234567"' 'it=iter(hexstring); [a+b for a,b in zip(it, it)]'
1000000 loops, best of 3: 1.84 usec per loop

$ python3.1 -m timeit -s 'hexstring = "01234567"; import re; r=re.compile(".{1,2}"); f=r.findall' 'f(hexstring)'
100000 loops, best of 3: 2.07 usec per loop

:

+7

:

>>> import re
>>> re.findall('.{1, 2}', '001122334455')
['00', '11', '22', '33', '44', '55']
>>> 
+2

:

map(''.join,zip(hexstring[::2],hexstring[1::2]))
+1
hexstring = "01234567"
[''.join(x) for x in zip(*[iter(hexstring)]*2)]
+1

:

>>> result = map(lambda x,y : x+y, *[iter('0013A20040522BAA')]*2)
>>> tuple(result)
('00', '13', 'A2', '00', '40', '52', '2B', 'AA')

zip, :

>>> result = (a+b for a,b in zip(*[iter('0013A20040522BAA')]*2))
>>> tuple(result)
('00', '13', 'A2', '00', '40', '52', '2B', 'AA')
0

? single(), (\), \\ (hex?), x99wh

(b'E \ x00 \ x00 (H \ XD2 @ \ x00 \ x80 \ x06 \ xa1J \ xc0 \ xa8 \ x01 = [\ x11 \ x8f \ xc5 [\ x01 \ Xbb \ x99wh \ XCD \\ xb2 \ xcdQP \ x10 \ x82t) M \ x00 \ x00 ', (' 192.168.1.33 ', 0))

Using socket.socket (socket.AF_INET, socket.SOCK_RAW) in a window

Here is a linux example. http://www.binarytides.com/python-packet-sniffer-code-linux/

0
source

Source: https://habr.com/ru/post/1752955/


All Articles