Python 中十六进制字符串到有符号 int
如何在 Python 3 中将十六进制字符串转换为有符号整型?
我能想到的最好的办法
h = '9DA92DAB'
b = bytes(h, 'utf-8')
ba = binascii.a2b_hex(b)
print(int.from_bytes(ba, byteorder='big', signed=True))
是有更简单的方法吗?无符号更容易: int(h, 16)
顺便说一句,问题的起源是 itunes 持久 id - 音乐库 xml 版本和 iTunes 十六进制版本
How do I convert a hex string to a signed int in Python 3?
The best I can come up with is
h = '9DA92DAB'
b = bytes(h, 'utf-8')
ba = binascii.a2b_hex(b)
print(int.from_bytes(ba, byteorder='big', signed=True))
Is there a simpler way? Unsigned is so much easier: int(h, 16)
BTW, the origin of the question is itunes persistent id - music library xml version and iTunes hex version
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在 n 位二进制补码中,位具有值:
但位 n-1 在无符号时值为 2n-1,因此数字为 2n > 太高。如果设置了位 n-1,则减去 2n:
输出:
In n-bit two's complement, bits have value:
But bit n-1 has value 2n-1 when unsigned, so the number is 2n too high. Subtract 2n if bit n-1 is set:
Output:
对于Python 3(带有注释的帮助):
对于Python 2:
或者如果它是小端:
For Python 3 (with comments' help):
For Python 2:
or if it is little endian:
这是一个可用于任何大小的十六进制的通用函数:
并使用它:
Here's a general function you can use for hex of any size:
And to use it:
这适用于 16 位有符号整数,您可以扩展为 32 位整数。它使用 2 的补码有符号数的基本定义。 另请注意,与 1 的异或是与二进制否定相同。
This works for 16 bit signed ints, you can extend for 32 bit ints. It uses the basic definition of 2's complement signed numbers. Also note xor with 1 is the same as a binary negate.
这是一个很晚的答案,但这里有一个执行上述操作的函数。这将延伸到您提供的任何长度。将此部分归功于另一个 SO 答案(我丢失了链接,所以如果您找到它,请提供它)。
It's a very late answer, but here's a function to do the above. This will extend for whatever length you provide. Credit for portions of this to another SO answer (I lost the link, so please provide it if you find it).