gpt4 book ai didi

Python:int(hexstr) 与 bytes.fromhex()

转载 作者:太空宇宙 更新时间:2023-11-03 19:46:36 24 4
gpt4 key购买 nike

考虑从十六进制字符串构造 int,而不是构造 bytes 对象:

hexstr = "FFF" # note there is an odd number of characters

int(hexstr, base=16)
Out[110]: 4095


bytes.fromhex(hexstr)
Traceback (most recent call last):
File "C:\Miniconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3319, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-107-0e5b955c6858>", line 1, in <module>
bytes.fromhex(hexstr)
ValueError: non-hexadecimal number found in fromhex() arg at position 3

如果我们添加前导零字符,一切都会正常:

hexstr = "0FFF"  # now we have an even number of hex characters
bytes.fromhex(hexstr)
Out[109]: b'\x0f\xff'

因此 int() 可以处理奇数个十六进制字符,但 bytes.fromhex() 不能。事实上,the documentation bytes.fromhex() 明确指出每个字节需要 2 个字符。

这些都是事实,我不会质疑它们。

相反,我的问题是一个语言设计问题:这种不一致的原因是什么?为什么转换为 int 时可以假定前导零,但转换为 bytes 时就不可以了?

最佳答案

int(hexstr, 16) 获取整个十六进制数并将其转换为 int。

另一方面,

bytes.fromhex(hexstr) 将输入拆分为十六进制数字对,将每一对转换为一个字节(一对十六进制数字可以包含完全相同的范围)值作为单个字节,这就是为什么通常使用十六进制来表示二进制数据)并从所有这些字节中创建一个字节串。

这些是不同的操作,因此它们对输入有不同的约束是正常的。

关于Python:int(hexstr) 与 bytes.fromhex(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60096293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com