- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
考虑从十六进制字符串构造 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/
我正在尝试将一个数字(任意大小,可能很长)转换为其相应的字节字符串。例如,输入数字 1094795585(基数 10),即 0x41414141(基数 16),应返回“\x41\x41\x41\x41
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 3 年前。 Improv
我有一个 Python3 函数,它结合了两个 bytes , 一次使用 bytes.fromhex()方法,其他使用 to_bytes()方法: from datatime import dateti
我有一个十六进制字符串 hexDecoded = '0xa506f7374696e6720446174653a204a756c792031322c2032303038205b45426f6f6b202
我是一名优秀的程序员,十分优秀!