为什么 bytes.fromhex() 会奇怪地处理一些十六进制值?
- 2025-03-05 09:17:00
- admin 原创
- 78
问题描述:
我正在尝试使用 Python 中的套接字库将两个十六进制数字的字节发送到一个编程为接受它们的硬件。为了从用户输入的十六进制数字字符串创建字节,我尝试使用此处bytes.fromhex()
描述的方法。
为什么会出现以下情况:
hexstring = "bb 0D 02 55 55 5A ce"
data = bytes.fromhex(hexstring)
print(data)
给我:
b'xbb
x02UUZxce'
而不是:
b'xbbx0dx02x55x55x5axce'
?
我该如何让它产生第二个输出?我正在使用 Python 3.5。
解决方案 1:
这与 无关bytes.fromhex()
。如果你将预期结果输入 Python,则会得到相同的结果:
>>> b'xbbx0dx02x55x55x5axce'
b'xbb
x02UUZxce'
repr()
对象的表示将bytes
始终使用 ASCII 可打印字符和短的单字母转义序列(如果可能)。
因此x0d
显示为`,因为这是回车符的 ASCII 代码点。
x55是可打印的 ASCII 字符
U`,等等。
如果这对您来说是一个问题,您必须bytes
再次明确地将您的值转换为十六进制:
>>> b'xbb
x02UUZxce'.hex()
'bb0d0255555ace'
解决方案 2:
Python 会自动将可解释为可打印 ASCII 的字节显示为它们所打印的字符。例如,,chr(0x55) == 'U'
因此 Python 只会打印 U 而不是十六进制代码。它仍然是相同的数据。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD