我有一个程序,它将二进制替换成一个文件。作为该程序的一部分,将创建一个正则表达式匹配对象来匹配要替换的二进制文件。它的形式如下:
a = re.compile(b"|".join([list_of_hex_to_be_substituted])然后打印此对象以进行调试。但是,在打印时,我遇到了这样的问题: python用一些十六进制值替换它们的ascii等价物,而不使用一些单独的值。在一个极端的例子中,这可能导致以下问题:
print(b"\x01\x00\x5C\x78\x33\x34")
--> b"\x01\x00\\x34在ascii中,5C 78 33 34是\x34。在调试脚本时,这是非常混乱的。我要找的是一种简单的方法,把十六进制打印成十六进制(不使用ascii substiution)。
发布于 2022-09-13 11:00:15
回答
有用于此的bytes.hex方法:
hex([sep[, bytes_per_sep]])返回一个字符串对象,其中包含实例中每个字节的两个十六进制数字。
如果希望使十六进制字符串更容易读取,可以在输出中指定一个字符分隔符sep参数。默认情况下,每个字节之间将包含此分隔符。第二个可选的bytes_per_sep参数控制间距。正值从右边计算分隔符位置,从左边计算负值。
备注:可选参数存在于版本
3.8中,并且在版本3.5中引入了该方法。
示例
无参数
下面是一些没有参数的示例,请注意,sep的默认值是一个空字符串(例如''、"")。
>>> b'\xf0\xf1\xf2'.hex()
'f0f1f2'下面是使用这两个可选参数的一些示例,如果您对这些参数的工作方式有任何疑问,那么这个示例应该很清楚:
>>> value = b"\x01\x00\x5C\x78\x33\x34"
>>> value.hex(' ',1)
'01 00 5c 78 33 34'
>>> value.hex(" ",2)
'0100 5c78 3334'https://stackoverflow.com/questions/73701739
复制相似问题