首页 文章

在Python中将十六进制字符串转换为int

提问于
浏览
606

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

我可以将它作为“ 0xffff " or just " ffff ” .

10 回答

  • 0

    Without 0x前缀,你需要明确指定基数,否则无法告诉:

    x = int("deadbeef", 16)
    

    With 0x前缀,Python可以自动区分十六进制和十进制 .

    >>> print int("0xdeadbeef", 0)
    3735928559
    >>> print int("10", 0)
    10
    

    (您必须指定 0 作为基础才能调用此前缀猜测行为;省略第二个参数意味着假定基数为10 . )

  • -3

    ast.literal_eval (这是安全的,与 eval 不同):

    ast.literal_eval("0xffff")
    

    Demo:

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

    添加上面的Dan的答案:如果你提供带有十六进制字符串的int()函数,你必须将基数指定为16,否则它不会认为你给它一个有效的值 . 对于不包含在字符串中的十六进制数,不需要指定基数16 .

    print int(0xdeadbeef) # valid
    
    myHex = "0xdeadbeef"
    print int(myHex) # invalid, raises ValueError
    print int(myHex , 16) # valid
    
  • 11

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

    Example

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

    int(hexString, 16) 诀窍,使用和不使用0x前缀:

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

    在Python中将十六进制字符串转换为int我可能将其作为“0xffff”或只是“ffff” .

    要将字符串转换为int,请将字符串传递给 int 以及要转换的基数 .

    这两个字符串都足以以这种方式进行转换:

    >>> string_1 = "0xffff"
    >>> string_2 = "ffff"
    >>> int(string_1, 16)
    65535
    >>> int(string_2, 16)
    65535
    

    Letting int推断

    如果传递0作为基数, int 将从字符串中的前缀推断出基数 .

    >>> int(string_1, 0)
    65535
    

    如果没有十六进制前缀, 0xint 没有足够的信息可供猜测:

    >>> 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将为您进行转换:

    >>> integer = 0xffff
    >>> integer
    65535
    

    这不适用于 ffff ,因为Python会认为您正在尝试编写合法的Python名称:

    >>> integer = ffff
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'ffff' is not defined
    

    Python数字以数字字符开头,而Python名称不能以数字字符开头 .

  • 1

    最糟糕的方式:

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

    请不要这样做!

    Is using eval in Python a bad practice?

  • 25

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

    int(s, 16)
    
  • 42

    使用'0x'前缀,您也可以使用eval函数

    例如

    >>a='0xff'
    >>eval(a)
    255
    
  • 1

    在Python 2.7中, int('deadbeef',10) 似乎不起作用 .

    以下为我工作:

    >>a = int('deadbeef',16)
    >>float(a)
    3735928559.0
    

相关问题