Pythonで16進文字列をintに変換するにはどうすればよいですか?
私はそれを " 0xffff" または単に " "として持っているかもしれませんffff。
0x プレフィックスがない場合は、ベースを明示的に指定する必要があります。そうしないと、次のように伝える方法がありません。
x = int("deadbeef", 16)
0x プレフィックスを使用すると、Python は 16 進数と 10 進数を自動的に区別できます。
>>> print(int("0xdeadbeef", 0))
3735928559
>>> print(int("10", 0))
10
(このプレフィックス推測動作を呼び出すには、base として指定する必要があります。2 番目のパラメーターを省略すると、base-10 が想定されます。)0int()
int(hexstring, 16)トリックを行い、0x プレフィックスの有無にかかわらず動作します。
>>> int("a", 16)
10
>>> int("0xa", 16)
10
Pythonで16進文字列をintに変換する
私はそれを持っているかもしれませ
"0xffff"ん"ffff"。
文字列を int に変換するにintは、変換元のベースと共に文字列を渡します。
両方の文字列は、次の方法で変換できます。
>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535
intさせる基数として 0 を渡すintと、文字列のプレフィックスから基数が推測されます。
>>> int(string_1, 0)
65535
16 進数のプレフィックスがないと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'
ソースコードまたはインタープリターに入力している場合、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 の名前は数字で始めることはできません。
任意の文字列 s に対して:
int(s, 16)
上記のダンの答えに追加:int()関数に16進文字列を指定する場合、基数を16に指定する必要があります。そうしないと、有効な値を指定したとは見なされません。文字列に含まれない 16 進数の場合、基数 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
フォーマッタ オプション '%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
Python 2.7 では、int('deadbeef',10)動作しないようです。
以下は私にとってはうまくいきます:
>>a = int('deadbeef',16)
>>float(a)
3735928559.0
「0x」プレフィックスを使用すると、eval 関数も使用できます
例えば
>>a='0xff'
>>eval(a)
255