How do I convert hex to decimal in Python?
我有一些Perl代码,其中hex()函数将十六进制数据转换为十进制。我怎样才能在Python上做呢?
- 是否确实要将数据转换为"十进制"?Perl函数只是将十六进制字符串转换为整数,而不是十进制字符串。
- @svenmarnach i use this perl hex()manual misc-perl-info.com/perl-hex.html"此函数:以十六进制字符串(或计算后返回十六进制字符串的表达式)作为参数将返回十进制对应值"
- @先生D:那篇文章措辞很差。正如Sven所说,hex将十六进制字符串转换为整数值(内部存储为二进制,但本质上只是一个没有基的数值)。对print的调用将该值转换为十进制字符串并打印出来。
- @博罗丁,谢谢你!
如果"十六进制数据"是指形式的字符串
1
| s ="6a48f82d8e828ce82b82" |
你可以使用
将其转换为整数,
将其转换为十进制字符串。
- 该死的,我爱Python。
- 对于负十六进制数,这不起作用。
- @Ericwang这对负数非常有效:ideone.com/ihoqvp。除非你有一个用固定宽度2的补码格式编码的负数,但是这和这里要求的问题不同。(提示:在这种情况下使用struct模块。)
- @是的,我是说ELF64格式中使用的2'补码。
- hex->decimal->binary->decimal:int(bin(int(hex(42), 16)), 2)。
- 注意,这是一个大尾数法的解释。这将适用于某些情况(例如许多网络协议都是big-endian),但不适用于其他情况,例如从当前大多数本机为little-endian的系统中查看内部程序数据。
- @虽然你的评论是准确的,但它也有误导性。在您提到的应用程序中,通常会有二进制数据,而不是包含十六进制数的nott字符串。您可以将该二进制数据转换为十六进制字符串,然后将其转换为十进制数字,但这样做几乎没有意义。使用struct模块直接转换二进制数据似乎更合适。
- 相反,遇到已经呈现为人类可读十六进制的数据是很常见的,它包含少量的endian数值。所以不,这个评论一点也不误导人。python不仅被用于全面的所有python解决方案,而且被大量用于处理其他系统的输出和日志,以及将测试设备粘合在一起。
- @克里斯特顿很公平。即使这样,我还是认为你最好先将文本表示解析为二进制表示(例如,使用binascii模块),然后解释二进制数据,但我想这取决于用例。
1 2
| >>> int("0xff", 16)
255 |
或
1 2
| >>> int("FFFF", 16)
65535 |
阅读文档。
- int(0xff)将做正确的事情。如果它作为字符串传递,则只需要显式基。
- @事实上,int()没有意义,在这种情况下,就像写int(255)一样,你只需要写0xff。
您可以使用文字评估:
1 2
| >>> ast.literal_eval('0xdeadbeef')
3735928559 |
或者只需指定基础作为int的参数:
1 2
| >>> int('deadbeef', 16)
3735928559 |