如何在 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
一个不为人知的技巧,如果你指定基数0
到int
,那么Python 会尝试从字符串前缀中确定基数:
>>> int("0xff", 0)
255
>>> int("0o644", 0)
420
>>> int("0b100", 0)
4
>>> int("100", 0)
100
【讨论】:
以上是关于如何在 Python 中将十六进制转换为十进制? [复制]的主要内容,如果未能解决你的问题,请参考以下文章