将十六进制字节字符串列表转换为十六进制整数列表的最简单方法是什么?

7 投票
4 回答
32137 浏览
提问于 2025-04-15 20:07

我有一个十六进制字节字符串的列表,像这样:

['BB', 'A7', 'F6', '9E']

(这是从一个文本文件中读取的)

我该怎么把这个列表转换成下面这种格式呢?

[0xBB, 0xA7, 0xF6, 0x9E]

4 个回答

4

[0xBB, 0xA7, 0xF6, 0x9E][187, 167, 158] 是一样的。所以没有什么特别的“十六进制整数”形式之类的。

不过你可以把你的十六进制字符串转换成整数:

>>> [int(x, 16) for x in ['BB', 'A7', 'F6', '9E']]
[187, 167, 246, 158]

另外可以参考 在Python中将十六进制字符串转换为整数

4

根据文本文件的格式,直接转换可能会更简单。

>>> b=bytearray('BBA7F69E'.decode('hex'))

或者

>>> b=bytearray('BB A7 F6 9E'.replace(' ','').decode('hex'))
>>> b
bytearray(b'\xbb\xa7\xf6\x9e')
>>> b[0]
187
>>> hex(b[0])
'0xbb'
>>> 

字节数组很容易转换成列表。

>>> list(b) == [0xBB, 0xA7, 0xF6, 0x9E]
True

>>> list(b)
[187, 167, 246, 158]

如果你想改变列表的显示方式,你需要自己创建一个列表类。

>>> class MyList(list):
...  def __repr__(self):
...   return '['+', '.join("0x%X"%x if type(x) is int else repr(x) for x in self)+']'
... 
>>> MyList(b)
[0xBB, 0xA7, 0xF6, 0x9E]
>>> str(MyList(b))
'[0xBB, 0xA7, 0xF6, 0x9E]'
10
[int(x, 16) for x in L]

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答