Форматировать целые числа в шестнадцатеричную строку - PullRequest
41 голосов
/ 14 апреля 2011

Мне нужно создать строку шестнадцатеричных цифр из списка случайных целых чисел (0-255).Каждая шестнадцатеричная цифра должна быть представлена ​​двумя символами: 5 - «05», 16 - «10» и т. Д.

Пример:

Input: [0,1,2,3,127,200,255], 
Output: 000102037fc8ff

Я имеюудалось придумать:

#!/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])

Однако это выглядит немного неловко.Есть ли более простой способ?

Ответы [ 7 ]

101 голосов
/ 15 ноября 2013

Просто для полноты, используя современный синтаксис .format():

>>> numbers = [1, 15, 255]
>>> ''.join('{:02X}'.format(a) for a in numbers)
'010FFF'
49 голосов
/ 14 апреля 2011
''.join('%02x'%i for i in input)
31 голосов
/ 14 апреля 2011
>>> str(bytearray([0,1,2,3,127,200,255])).encode('hex')
'000102037fc8ff'
16 голосов
/ 14 апреля 2011

Еще один вариант - binascii.hexlify:

a = [0,1,2,3,127,200,255]
print binascii.hexlify(bytes(bytearray(a)))

печать

000102037fc8ff

Это также самая быстрая версия для больших струн на моей машине.

InPython 2.7 или выше, вы можете улучшить это еще больше, используя

binascii.hexlify(memoryview(bytearray(a)))

, сохраняя копию, созданную вызовом bytes.

11 голосов
/ 20 апреля 2014

Аналогично моему другому ответу, за исключением повторения строки формата:

>>> numbers = [1, 15, 255]
>>> fmt = '{:02X}' * len(numbers)
>>> fmt.format(*numbers)
'010FFF'
3 голосов
/ 14 апреля 2011
a = [0,1,2,3,127,200,255]
print str.join("", ("%02x" % i for i in a))

печать

000102037fc8ff

(Также обратите внимание, что ваш код не будет работать для целых чисел в диапазоне от 10 до 15.)

0 голосов
/ 25 июля 2018

С python 2.X вы можете делать следующее:

numbers = [0, 1, 2, 3, 127, 200, 255]
print "".join(chr(i).encode('hex') for i in numbers)

print

'000102037fc8ff'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...