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

"0xffff"   ⟶   65535
"ffff"     ⟶   65535

当前回答

或者ast.literal_eval(这是安全的,不像eval):

ast.literal_eval("0xffff")

演示:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 

其他回答

Int (hexstring, 16)可以做到这一点,使用0x前缀和不使用0x前缀都可以:

>>> int("a", 16)
10
>>> int("0xa", 16)
10

处理十六进制、八进制、二进制、整型和浮点数

使用标准前缀(即0x, 0b, 0和0o),此函数将把任何合适的字符串转换为数字。我在这里回答了这个问题:https://stackoverflow.com/a/58997070/2464381但这里是需要的函数。

def to_number(n):
    ''' Convert any number representation to a number 
    This covers: float, decimal, hex, and octal numbers.
    '''

    try:
        return int(str(n), 0)
    except:
        try:
            # python 3 doesn't accept "010" as a valid octal.  You must use the
            # '0o' prefix
            return int('0o' + n, 0)
        except:
            return float(n)

对于任意给定的字符串s:

int(s, 16)

格式化程序选项'%x' %对我来说似乎也适用于赋值语句。(假设Python 3.0及更高版本)

例子

a = int('0x100', 16)
print(a)   #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100

请不要这样做!

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

为什么使用“eval”是一个不好的做法?

野外有15000多个这样的例子。