我有一个很长的十六进制字符串,它代表了一系列不同类型的值。我需要将此十六进制字符串转换为bytes
或bytearray
,以便从原始数据中提取每个值。我该如何做呢?
例如,字符串"ab"
应该转换为字节b"\xab"
或等效的字节数组。
>>> # what to use in place of `convert` here?
>>> convert("8e71c61de6a2321336184f813379ec6bf4a3fb79e63cd12b")
b'\x8eq\xc6\x1d\xe6\xa22\x136\x18O\x813y\xeck\xf4\xa3\xfby\xe6<\xd1+'
8条答案
按热度按时间juud5qan1#
假设十六进制字符串类似于
将其转换为字节数组(Python 3和Python 2.7):
将其转换为bytes对象(Python 3):
注意,
bytes
是bytearray
的不可变版本。将其转换为字符串(Python ≤ 2.7):
scyqe7ek2#
bytearray中有一个内置函数,可以完成您想要的操作。
它返回一个bytearray并读取带或不带空格分隔符的十六进制字符串。
gupuwyp23#
如果我理解正确,您应该查找binasci.unhexlify
hgtggwj04#
假设你有一个这样的字节串
“一个字母”
并且您知道字节的数量及其类型,您也可以使用此方法
由于我在格式字符串的开头指定了little endian(使用"〈“字符),所以函数返回的是等价的十进制数。
0x12 = 18
0x45 = 69
0xAB00 = 43776
B等于一个无符号字节(8位)
H等于两个无符号字节(16位)
更多可用的字符和字节大小可在此处找到
优点是..
您可以指定多个字节和值的字节序
缺点
您确实需要知道所处理的数据的类型和长度
v64noz0r5#
您可以使用Python标准库中的Codecs module,即
vbopmzt16#
您应该能够使用以下代码构建一个保存二进制数据的字符串:
这可能不是最快的方法(许多字符串追加),但是只使用核心Python就非常简单。
fdbelqdn7#
有时字节数组转换不起作用,因此在这种情况下,您可以这样做:
k5hmc34c8#
好的一句话是:
这将遍历字符串中的每个字符,并通过ord()函数运行它,只在python 2.6上测试过,对python 3.0+不太确定。