Как преобразовать список python от interger в список hex, получая ошибку List "struct.error: обязательный аргумент не является целым числом" - PullRequest
0 голосов
/ 30 октября 2018

У меня есть список с именем a=[0,1], и я хочу изменить его на тип a=[0x00,0x001]. Как я могу это сделать? Я пробовал таким образом

print (struct.pack('>h',a))

Но я не могу перейти на гекс

Ответы [ 5 ]

0 голосов
/ 30 октября 2018

Ниже приведен еще один способ преобразования списка целых чисел в список шестнадцатеричных с использованием функции карты:

a=[0,1]
print(map(hex,a))
# Output
# ['0x0', '0x1']
0 голосов
/ 30 октября 2018

Ниже приведен еще один способ преобразования списка целых чисел в список шестнадцатеричных

a = [0,1]
b = map(hex, a) 
# or 
b = map(lambda x:hex(x), a)
# output
print b
['0x1', '0x2']
0 голосов
/ 30 октября 2018

Использование hex (...) даст вам только наименьшее количество ведущих 0:

print( [hex(i) for i in [0,1]])  #  ['0x1', '0x2']

Вы можете отформатировать (...) строку в шестнадцатеричном формате и zfill () необходимое количество нулей и добавить к ней '0x' самостоятельно:

data = [0,1]

as_hex = [ "0x" + format(e,"x").zfill(2) for e in data]

print(as_hex)

Выход:

['0x00', '0x01']
0 голосов
/ 30 октября 2018

Поскольку вы не можете описать желаемый результат, я могу только догадываться:

  1. Вы хотите упаковать некоторые числа в строку?

    Тогда не имеет значения, какой формат вы используете, оба должны работать, как только вы используете правильную строку формата:

    a = [1, 2]
    b = [0x01, 0x02]
    struct.pack(">hh", *a)
    # > '\x00\x01\x00\x02'
    struct.pack(">hh", *b)
    # > '\x00\x01\x00\x02'
    

    Это потому, что a и b равны: не имеет значения, пишете ли вы 1 и 2 или предпочитаете ли вы 0x01 соответственно 0x02. Помните, что отображаемые строки являются просто представлениями строк, содержащих специальные символы со значениями 0, 1 и 2 соответственно.

  2. Хотите вывести свои числа в шестнадцатеричном представлении?

    В этом случае см. Другие ответы.

0 голосов
/ 30 октября 2018

Использование шестнадцатеричного кода напрямую должно работать:

>>> a = [0,1]
>>> a = [hex(i) for i in a]
>>> a
['0x0', '0x1']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...