J'ai besoin de créer une chaîne de chiffres hexadécimaux à partir d'une liste d'entiers aléatoires (0-255). Chaque chiffre hexadécimal doit être représenté par deux caractères: 5 - "05", 16 - "10", etc.
Exemple:
Input: [0,1,2,3,127,200,255], Output: 000102037fc8ff
J'ai réussi à trouver:
#!/usr/bin/env python
def format_me(nums):
result = ""
for i in nums:
if i <= 9:
result += "0%x" % i
else:
result += "%x" % i
return result
print format_me([0,1,2,3,127,200,255])
Cependant, cela semble un peu gênant. Y a-t-il un moyen plus simple?
''.join('%02x'%i for i in input)
Juste pour être complet, en utilisant la syntaxe moderne .format()
:
>>> numbers = [1, 15, 255]
>>> ''.join('{:02X}'.format(a) for a in numbers)
'010FFF'
>>> str(bytearray([0,1,2,3,127,200,255])).encode('hex')
'000102037fc8ff'
Une autre option est binascii.hexlify
:
a = [0,1,2,3,127,200,255]
print binascii.hexlify(bytes(bytearray(a)))
empreintes
000102037fc8ff
C'est aussi la version la plus rapide pour les grandes chaînes sur ma machine.
En Python 2.7 ou supérieur, vous pouvez améliorer cela encore davantage en utilisant
binascii.hexlify(memoryview(bytearray(a)))
enregistrer la copie créée par l'appel bytes
.
Semblable à mon autre réponse, à l'exception de la répétition de la chaîne de format:
>>> numbers = [1, 15, 255]
>>> fmt = '{:02X}' * len(numbers)
>>> fmt.format(*numbers)
'010FFF'
a = [0,1,2,3,127,200,255]
print str.join("", ("%02x" % i for i in a))
empreintes
000102037fc8ff
(Notez également que votre code échouera pour les entiers compris entre 10 et 15.)
Avec Python 2.X, vous pouvez effectuer les opérations suivantes:
numbers = [0, 1, 2, 3, 127, 200, 255]
print "".join(chr(i).encode('hex') for i in numbers)
impression
'000102037fc8ff'