在Python中将hexstring转换为int

如何在Python中将hexstring转换为int?

我可能会把它作为“ 0xffff ”或只是“ ffff ”。

没有 0x前缀,你需要明确指定基地,否则没有办法告诉:

 x = int("deadbeef", 16) 

使用 0x前缀,Python可以自动区分hex和十进制。

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

(为了调用这个前缀猜测行为, 必须指定0作为基础;省略第二个参数意味着假定基数为10)。

int(hexString, 16)做的伎俩,并与无前缀的工作:

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

对于任何给定的strings:

 int(s, 16) 

在Python中将hexstring转换为int

我可能会把它作为"0xffff"或只是"ffff"

要将string转换为int,请将string与要转换的基线一起传递给int

这两个string都可以用这种方式进行转换:

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

int推断

如果你传递0作为基数, int将从string中的前缀推断出基数。

 >>> int(string_1, 0) 65535 

没有hex前缀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' 

文字:

如果您正在input源代码或解释器,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名称不能以数字字符开头。

添加到丹的答案上面:如果你提供int()函数与hexstring,你将不得不指定基地为16或它不会认为你给了它一个有效的价值。 对于不包含在string中的hex数字,不需要指定基数16。

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

最糟糕的方式:

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

请不要这样做!

在Python中使用eval是一个不好的做法?

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

以下为我工作:

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

格式化程序选项'%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 

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

例如

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

要将DWORD从hex转换为有符号整数,请执行如下所示的二进制补码:

 ~ (0xffffffff - int('0xdeadbeef', 16)) + 1