首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制python将十六进制显示为十六进制。

强制python将十六进制显示为十六进制。
EN

Stack Overflow用户
提问于 2022-09-13 10:54:30
回答 1查看 43关注 0票数 2

我有一个程序,它将二进制替换成一个文件。作为该程序的一部分,将创建一个正则表达式匹配对象来匹配要替换的二进制文件。它的形式如下:

代码语言:javascript
复制
a = re.compile(b"|".join([list_of_hex_to_be_substituted])

然后打印此对象以进行调试。但是,在打印时,我遇到了这样的问题: python用一些十六进制值替换它们的ascii等价物,而不使用一些单独的值。在一个极端的例子中,这可能导致以下问题:

代码语言:javascript
复制
print(b"\x01\x00\x5C\x78\x33\x34")
--> b"\x01\x00\\x34

在ascii中,5C 78 33 34\x34。在调试脚本时,这是非常混乱的。我要找的是一种简单的方法,把十六进制打印成十六进制(不使用ascii substiution)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-13 11:00:15

回答

有用于此的bytes.hex方法:

代码语言:javascript
复制
 hex([sep[, bytes_per_sep]])

返回一个字符串对象,其中包含实例中每个字节的两个十六进制数字。

如果希望使十六进制字符串更容易读取,可以在输出中指定一个字符分隔符sep参数。默认情况下,每个字节之间将包含此分隔符。第二个可选的bytes_per_sep参数控制间距。正值从右边计算分隔符位置,从左边计算负值。

备注:可选参数存在于版本3.8中,并且在版本3.5中引入了该方法。

示例

无参数

下面是一些没有参数的示例,请注意,sep的默认值是一个空字符串(例如''"")。

代码语言:javascript
复制
>>> b'\xf0\xf1\xf2'.hex()
'f0f1f2'

  1. 使用sep和bytes_per_sep参数

下面是使用这两个可选参数的一些示例,如果您对这些参数的工作方式有任何疑问,那么这个示例应该很清楚:

代码语言:javascript
复制
>>> value = b"\x01\x00\x5C\x78\x33\x34"
>>> value.hex(' ',1)
'01 00 5c 78 33 34'
>>> value.hex(" ",2)
'0100 5c78 3334'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73701739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档