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]
这是我正在尝试做的事情:
给定下面的字节数组:
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]