Python将bytearray转换为十六进制数组

时间:2015-04-03 12:19:44

标签: python bytearray

以下是我要做的事情:

给出了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&#39)

PLS:

将其变为新的数组,如[0xC00000,0xFEB4F0,...]

2 个答案:

答案 0 :(得分:0)

>>> [(a<<16)+(b<<8)+c for a,b,c in zip(*[iter(bytes[3:])]*3)]
[16692464, 16692400, 16692430, 16692332, 16692879, 16692534, 16692597, 16692401]

答案 1 :(得分:0)

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获取int(hexstring, 16)的列表:

>>> [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]