如何在 Python 中将十六进制转换为十进制? [复制]

Posted

技术标签:

【中文标题】如何在 Python 中将十六进制转换为十进制? [复制]【英文标题】:How do I convert hex to decimal in Python? [duplicate] 【发布时间】:2012-03-01 21:41:25 【问题描述】:

我有一些 Perl 代码,其中 hex() 函数将十六进制数据转换为十进制。我如何在Python 上做到这一点?

【问题讨论】:

您确定要将数据转换为“十进制”吗? Perl 函数只是将十六进制字符串转换为整数,而不是十进制字符串。 @SvenMarnach 我使用这个 perl hex() 手册 misc-perl-info.com/perl-hex.html "这个函数:有一个十六进制字符串作为参数(或者一个表达式,在评估后将返回一个十六进制字符串)将返回十进制对应值" @Sir D:那篇文章措辞非常糟糕。正如 Sven 所说,hex 将十六进制字符串转换为整数值(在内部以二进制形式存储,但本质上只是一个没有基数的数值)。对print 的调用将该值转换为十进制字符串并打印出来。 扩展问题“如何像 python 解释器那样从十六进制或十进制(或二进制)转换为整数。”在“这里已经有答案的问题”中得到了回答。 int(string,base) 函数从字符串前缀推断输入字符串的基数如果您传递 0 作为基数。例如int("0x1402",0) int("0b1010000000010",0) int("5122",0) ***.com/questions/209513/… 【参考方案1】:

如果“十六进制数据”是指形式的字符串

s = "6a48f82d8e828ce82b82"

你可以使用

i = int(s, 16)

将其转换为整数和

str(i)

将其转换为十进制字符串。

【讨论】:

对于一个负的十六进制数,这不起作用。 @EricWang 这对负数非常有效:ideone.com/IHOQvp。除非你有一个以固定宽度二进制补码格式编码的负数,但这将是一个与这里所要求的不同的问题。 (提示:在这种情况下使用struct 模块。) @SvenMarnach 是的,我的意思是 2' 补码用于 elf64 格式。 十六进制 -> 十进制 -> 二进制 -> 十进制:int(bin(int(hex(42), 16)), 2) 注意这是一个大端解释。这适用于某些事情(例如许多网络协议是大端),但不适用于其他事情,例如查看当前大多数原生小端系统的内部程序数据。【参考方案2】:
>>> int("0xff", 16)
255

>>> int("FFFF", 16)
65535

Read the docs.

【讨论】:

int(0xff) 会做正确的事。如果它作为字符串传递,它只需要一个显式的基础。 @cassm 实际上,在这种情况下,int() 毫无意义——就像写 int(255)——你可以写 0xff【参考方案3】:

你可以使用文字评估:

>>> ast.literal_eval('0xdeadbeef')
3735928559

或者只是将基数指定为int 的参数:

>>> int('deadbeef', 16)
3735928559

一个不为人知的技巧,如果你指定基数0int,那么Python 会尝试从字符串前缀中确定基数:

>>> int("0xff", 0)
255
>>> int("0o644", 0)
420
>>> int("0b100", 0)
4
>>> int("100", 0)
100

【讨论】:

以上是关于如何在 Python 中将十六进制转换为十进制? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中将负指数数转换为十进制数?

在python中将32位二进制转换为十进制

如何在 Python 中将字符串转换为十六进制整数?

如何在python中将负整数值转换为十六进制

如何在Python中将十六进制字符串转换为ObjectId [重复]

如何在 Python 中将单个字符转换为其十六进制 ASCII 值?