在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前缀0x , int没有足够的信息来猜测: 
 >>> 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