Format ints into string of hex
Solution 1:
Just for completeness, using the modern .format()
syntax:
>>> numbers = [1, 15, 255]
>>> ''.join('{:02X}'.format(a) for a in numbers)
'010FFF'
Solution 2:
''.join('%02x'%i for i in input)
Solution 3:
Python 2:
>>> str(bytearray([0,1,2,3,127,200,255])).encode('hex')
'000102037fc8ff'
Python 3:
>>> bytearray([0,1,2,3,127,200,255]).hex()
'000102037fc8ff'
Solution 4:
The most recent and in my opinion preferred approach is the f-string
:
''.join(f'{i:02x}' for i in [1, 15, 255])
Format options
The old format style was the %
-syntax:
['%02x'%i for i in [1, 15, 255]]
The more modern approach is the .format
method:
['{:02x}'.format(i) for i in [1, 15, 255]]
More recently, from python 3.6 upwards we were treated to the f-string
syntax:
[f'{i:02x}' for i in [1, 15, 255]]
Format syntax
Note that the f'{i:02x}'
works as follows.
- The first part before
:
is the input or variable to format. - The
x
indicates that the string should be hex.f'{100:02x}'
is'64'
,f'{100:02d}'
(decimal) is'100'
andf'{100:02b}'
(binary) is'1100100'
. - The
02
indicates that the string should be left-filled with0
's to minimum length2
.f'{100:02x}'
is'64'
andf'{100:30x}'
is' 64'
.
Solution 5:
Yet another option is binascii.hexlify
:
a = [0,1,2,3,127,200,255]
print binascii.hexlify(bytes(bytearray(a)))
prints
000102037fc8ff
This is also the fastest version for large strings on my machine.
In Python 2.7 or above, you could improve this even more by using
binascii.hexlify(memoryview(bytearray(a)))
saving the copy created by the bytes
call.