Python将bytearray转换为hex数组

2024-05-20 14:10:01 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我要做的:

考虑到下面的问题:

字节阵列(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,…]


Tags: 字节数组x00xb1xfexb0xc0xf0
2条回答
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)]

生成十六进制字符串的列表:

^{pr2}$

你要的名单

[0xC00000, 0xFEB4F0, ...]

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

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

在Python2中,可以通过使用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]
>>> [(a<<16)+(b<<8)+c for a,b,c in zip(*[iter(bytes[3:])]*3)]
[16692464, 16692400, 16692430, 16692332, 16692879, 16692534, 16692597, 16692401]

相关问题 更多 >