Python 将字节数组转换为十六进制数组

Python convert a bytearray to hex array

这是我正在尝试做的事情:

给定下面的字节数组:

bytearray(b'\xc0\x00\x00\xfe\xb4\xf0\xfe\xb4\xb0\xfe\xb4\xce\xfe\xb4l\xfe\xb6\x8fxfe\xb56\xfe\xb5u\xfe\xb4\xb1')

请问:

将它变成一个新数组,如 [0xC00000, 0xFEB4F0, ...]

>>> [(a<<16)+(b<<8)+c for a,b,c in zip(*[iter(bytes[3:])]*3)]
[16692464, 16692400, 16692430, 16692332, 16692879, 16692534, 16692597, 16692401]
import binascii
x = bytearray(b'\xc0\x00\x00\xfe\xb4\xf0\xfe\xb4\xb0\xfe\xb4\xce\xfe\xb4l\xfe\xb6\x8fxfe\xb56\xfe\xb5u\xfe\xb4\xb1')

[binascii.hexlify(x[i:i+3]) for i in range(0, len(x), 3)]

产生十六进制字符串列表:

['c00000', 'feb4f0', 'feb4b0', 'feb4ce', 'feb46c', 'feb68f', '786665', 
 'b536fe', 'b575fe', 'b4b1']

您要的列表,

[0xC00000, 0xFEB4F0, ...]

int 的列表,因为,例如,0xC00000 只是一个用十六进制表示的 int

In [7]: 0xC00000
Out[7]: 12582912

在 Python2 中,您可以使用 int(hexstring, 16):

获取 int 的列表
>>> [int(binascii.hexlify(x[i:i+3]), 16) for i in range(0, len(x), 3)]
[12582912, 16692464, 16692400, 16692430, 16692332, 16692879, 7890533,
 11876094, 11892222, 46257] 

或者,在Python3,

>>> [int.from_bytes(x[i:i+3], 'big', signed=False) for i in range(0, len(x), 3)]
[12582912, 16692464, 16692400, 16692430, 16692332, 16692879, 7890533, 
 11876094, 11892222, 46257]