Python 字符串转十六进制

Python String to hex

所以,我已经用头撞墙太久了,似乎应该是一个简单的数据转换。我在 python 中编写并传递给另一个模块一个十六进制值,该值用包装器转换为 c 类型 uint_64t。问题是我通过 python 库 argparse 获取这个十六进制值。当它接受这个值时,例如让我们使用值 0x3f,它把它保存为一个字符串。如果我尝试将其转换为 int,则会抛出错误:

"ValueError: invalid literal for int() with base 10: '0x3f'"

但是,如果我创建一个变量 hex = 0x3f,当我打印它时,它会给我适当的整数值。 (这很棒,因为我正在创建一个 uint)如果强制转换不起作用,我只是很困惑如何进行从字符串到 int 的转换。我已经看到很多关于将此字符串按字母转换为十六进制值的示例(换句话说,获取 ascii 字符串 '0x3f' 的每个单独字符并为其赋予一个十六进制值),但我无法找到一个示例我正在寻找的情况。抱歉,如果我提出的问题已被多次回答。

尝试指定 int 以 16 为基数:

>>> int("0x3f", 16)
63

您也可以使用 ast.literal_eval,它应该能够读取任何可用作整数文字的字符串。只要存在 0x 前缀,您甚至不必为此指定基数。

>>> import ast
>>> #hexadecimal
>>> ast.literal_eval("0x3f")
63
>>> #binary
>>> ast.literal_eval("0b01010")
10
>>> #octal
>>> ast.literal_eval("0712")
458
>>> #decimal
>>> ast.literal_eval("42")
42

int 有一个可选的第二个参数,它是用于转换的数字基数。默认为 10(十进制转换),但您可以将其更改为 16(十六进制)或 0(根据前缀自动转换):

>>> int('0b1010', 0)
10
>>> int('0x3f', 0)
63
>>> int('0o777', 0)
511
>>> int('1234', 0)
1234