inp = r"bytearray(b'\x00\x00\x14G\x00\x00\n\xfe')"
if inp.startswith("bytearray(b'") and inp.endswith("')"):
arg = inp[12:-2] # strip bytearray(b' and '), leave the string in between
unesc = arg.encode('latin1').decode('unicode-escape')
ba = bytearray(unesc, 'latin1')
print(f"result: {ba!r}")
else:
print("parse error!")
该文件中没有bytearray,只有其文本表示(纯文本)。我们需要从中重建bytearray
要将像
"bytearray(b'\x00\x00\x14G\x00\x00\n\xfe')"
这样的字符串转换为实字节数组,第一个想法通常是使用eval
,但有充分的理由尽可能避免使用eval
我们可以简单地从字符串中提取参数,处理其中的转义序列(如
\x00
和\n
),并将结果传递给bytearray()
,以便创建最终的对象要提取参数,请使用正则表达式等。如果格式是固定的,简单的工具就可以了
转义序列可以使用
'unicode-escape'
解码器取消转义,但我们必须将字符串转换为字节latin1
只是8位ASCII的名称,即bytearray使用的0-255个值一个简单的演示:
ba
是一个实字节数组,它的表示repr(ba)
等于inp
相关问题 更多 >
编程相关推荐