Python:int(hexstr)vs.bytes.fromhex()
考虑从十六进制字符串构造int,而不是构造bytes对象:Python:int(hexstr)vs.bytes.fromhex(),python,data-conversion,language-design,Python,Data Conversion,Language Design,考虑从十六进制字符串构造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\interactives
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
因此int()可以处理奇数个十六进制字符,但bytes.fromhex()不能。
实际上,of bytes.fromhex()明确表示每个字节需要2个字符
这些都是事实,我没有反驳
相反,我的问题是一个语言设计问题:这种不一致的原因是什么?
为什么在转换为整数时可以假定前导零,但在转换为字节时不可以?int(hexstr,16)
获取整个十六进制数并将其转换为整数
bytes.fromhex(hexstr)
另一方面,将输入拆分为成对的十六进制数字,将每对数字转换为一个字节(一对十六进制数字可以包含与单个字节完全相同的值范围,这就是为什么十六进制通常用于表示二进制数据)并用所有这些字节创建一个bytestring
这些是不同的操作,因此它们对输入有不同的约束是正常的。int(hexstr,16)
获取整个十六进制数并将其转换为int
bytes.fromhex(hexstr)
另一方面,将输入拆分为成对的十六进制数字,将每对数字转换为一个字节(一对十六进制数字可以包含与单个字节完全相同的值范围,这就是为什么十六进制通常用于表示二进制数据)并用所有这些字节创建一个bytestring
这些是不同的操作,所以它们对输入有不同的约束是正常的
hexstr = "0FFF" # now we have an even number of hex characters
bytes.fromhex(hexstr)
Out[109]: b'\x0f\xff'