было интересно, если есть способ в Python преобразовать массив или список в один номер:Python: Преобразование массив в целое число
А = [0xAA, 0xBB, 0xCC]
д = 0xaabbcc
Спасибо за помощь!
было интересно, если есть способ в Python преобразовать массив или список в один номер:Python: Преобразование массив в целое число
А = [0xAA, 0xBB, 0xCC]
д = 0xaabbcc
Спасибо за помощь!
A = [0xaa, 0xbb, 0xcc]
d = reduce(lambda x, y: x*256 + y, A)
print hex(d)
Использование hex()
, map()
и join()
.
>>> '0x' + ''.join(map(hex, A)).replace('0x', '')
'0xaabbcc'
Или с lambda
:
>>> '0x' + ''.join(map(lambda x: hex(x)[2:], A))
'0xaabbcc'
Благодаря @John Ла Роя за указание на то, что это не удается с 1-х цифр. Следующая модификация версии lambda
лучше:
>>> B = [0x1, 0x4, 0x3]
>>> '0x' + ''.join(map(lambda x: hex(x)[2:].rjust(2, '0'), B))
'0x010403'
Но в тот момент, что лучше использовать ответ Джона.
Что делать, если некоторые элементы A <0x10? –
Для Python3 +, int
имеет метод для этого
>>> A=[0xaa, 0xbb, 0xcc]
>>> hex(int.from_bytes(A, byteorder="big"))
'0xaabbcc'
>>> 0xaabbcc == int.from_bytes(A, byteorder="big")
True
Для python2, это, вероятно, лучше, чтобы написать небольшую функцию
>>> A = [0xaa, 0xbb, 0xcc]
>>>
>>> def to_hex(arr):
... res = 0
... for i in arr:
... res <<= 8
... res += i
... return res
...
>>> 0xaabbcc == to_hex(A)
True
Я предлагаю вам использовать 'х << y.bit_length () 'вместо' x * 256', чтобы сделать ваш код более гибким. – Alik
@Alik. Вы правы, но только если исходный вопрос хочет иметь дело с битами вместо байтов. Обратите внимание, что для 'a = 1'' a.bit_length() 'дает 1. – dlask
О, я не думал об этом вопросе. Я думаю, что OP должен уточнить, что он хочет делать. – Alik