打印十六进制,中间有空格

chx*_*sny 4 python hex python-3.x

我正在尝试以其他方式打印十六进制...

首先,我将其转换(字节串是变量的名称):

b'\xff\x00\xff\xff\xff'
Run Code Online (Sandbox Code Playgroud)

十六进制

print(bytestring.hex())
Run Code Online (Sandbox Code Playgroud)

输出:

ff00ffffff
Run Code Online (Sandbox Code Playgroud)

但我已经尝试了一段时间以使其输出:

ff 00 ff ff ff
Run Code Online (Sandbox Code Playgroud)

但没有运气。

有什么建议么?干杯!


更新:

stringdata = f.read(5)
print(stringdata)
#b'\xff\x00\xff\xff\xff'

readHex = " ".join(["{:02x}".format(x) for x in stringdata.hex()])
# ValueError: Unknown format code 'x' for object of type 'str'
Run Code Online (Sandbox Code Playgroud)

Jea*_*bre 5

只需将字节数组转换为十六进制字符串,然后将结果与空格连接即可:

>>> d=b'\xff\x00\xff\xff\xff'
>>> " ".join(["{:02x}".format(x) for x in d])
'ff 00 ff ff ff'
Run Code Online (Sandbox Code Playgroud)

请注意," ".join("{:02x}".format(x) for x in d)这也可以,但是强制列表创建的速度更快,如此处所述:连接字符串。生成器或列表理解?

在Python 2,bytes就是str这样,你必须使用ord获得的字符代码

>>> " ".join(["{:02x}".format(ord(x)) for x in d])
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Python 3.8+ 中,hex函数有一个可选的参数拆分器。

>>> print(b'\xff\x00\xff\xff\xff'.hex(' '))
'ff 00 ff ff ff'
Run Code Online (Sandbox Code Playgroud)

你可以用你想要的任何字符分割十六进制字符串。

>>> print(b'\xff\x00\xff\xff\xff'.hex(':'))
'ff:00:ff:ff:ff'
Run Code Online (Sandbox Code Playgroud)

  • 第二个参数用于设置每个分隔符的字节数,默认值为 1。如果将其设置为负数,则会从右侧而不是左侧计算分隔符。[文档:十六进制\(\[sep\[, bytes_per_sep\]\]\)](https://docs.python.org/3/library/stdtypes.html#bytes.hex) (2认同)