Convert hex string to int in Python
如何在Python中将十六进制字符串转换为int?
我可以用"EDOCX1"〔0〕或"EDOCX1"〔1〕来表示。
如果没有0x前缀,则需要显式指定基,否则就无法判断:
1 | x = int("deadbeef", 16) |
使用0x前缀,python可以自动区分十六进制和十进制。
1 2 3 4 | >>> print int("0xdeadbeef", 0) 3735928559 >>> print int("10", 0) 10 |
(必须指定
1 2 3 4 | >>> int("a", 16) 10 >>> int("0xa",16) 10 |
对于任何给定的字符串:
1 | int(s, 16) |
Convert hex string to int in Python
I may have it as
"0xffff" or just"ffff" .
要将字符串转换为int,请将该字符串与要转换的基一起传递给
两个字符串都可以通过这种方式进行转换:
1 2 3 4 5 6 | >>> string_1 ="0xffff" >>> string_2 ="ffff" >>> int(string_1, 16) 65535 >>> int(string_2, 16) 65535 |
让
如果将0作为基传递,
1 2 | >>> int(string_1, 0) 65535 |
没有十六进制前缀,
1 2 3 4 | >>> int(string_2, 0) Traceback (most recent call last): File"<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 0: 'ffff' |
文字:
如果您正在输入源代码或解释器,python将为您进行转换:
1 2 3 | >>> integer = 0xffff >>> integer 65535 |
这不适用于
1 2 3 4 | >>> integer = ffff Traceback (most recent call last): File"<stdin>", line 1, in <module> NameError: name 'ffff' is not defined |
python数字以数字字符开头,而python名称不能以数字字符开头。
加上上面丹的回答:如果您为int()函数提供一个十六进制字符串,则必须将基指定为16,否则它将认为您没有给它一个有效的值。对于未包含在字符串中的十六进制数,不需要指定基数16。
1 2 3 4 5 | print int(0xdeadbeef) # valid myHex ="0xdeadbeef" print int(myHex) # invalid, raises ValueError print int(myHex , 16) # valid |
最坏的方式:
1 2 3 4 5 | >>> def hex_to_int(x): return eval("0x" + x) >>> hex_to_int("c0ffee") 12648430 |
请不要这样做!
在python中使用eval是一种坏做法吗?
或者是
1 | ast.literal_eval("0xffff") |
演示:
1 2 3 4 | >>> import ast >>> ast.literal_eval("0xffff") 65535 >>> |
在python 2.7中,
以下对我有效:
1 2 3 | >>a = int('deadbeef',16) >>float(a) 3735928559.0 |
格式化程序选项"%x"似乎也适用于赋值语句。(假设python 3.0及更高版本)
例子
1 2 3 4 5 6 7 | a = int('0x100', 16) print(a) #256 print('%x' % a) #100 b = a print(b) #256 c = '%x' % a print(c) #100 |
前缀为"0x"时,也可以使用eval函数
例如
1 2 3 | >>a='0xff' >>eval(a) 255 |