在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