Pythonで16進文字列をintに変換するにはどうすればいいですか?
私はそれを "0xffff
"あるいは単に "ffff
"として持っているかもしれません。
0xプレフィックスがない場合は、ベースを明示的に指定する必要があります。それ以外の場合、指示する方法はありません。
x = int("deadbeef", 16)
0xプレフィックスを使用すると、Pythonは自動的に16進数と10進数を区別できます。
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(この接頭部推測動作を呼び出すには、 must を0
に指定する必要があります。2番目のパラメーターを省略すると、base-10と見なされます。)
int(hexString, 16)
はトリックを行い、0xプレフィックスの有無にかかわらず動作します。
>>> int("a", 16)
10
>>> int("0xa",16)
10
与えられた文字列sに対して:
int(s, 16)
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
0x
という16進数の接頭辞がないと、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
Pythonはあなたが代わりに正規のPython名を書き込もうとしていると考えるので、これはffff
ではうまくいきません:
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
Pythonの番号は数字で始まりますが、Pythonの名前は数字で始めることはできません。
上記のDanの答えに付け加えると、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
またはast.literal_eval
(これはeval
とは異なり安全です):
ast.literal_eval("0xffff")
デモ:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
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
pythonインタープリターを使用している場合は、0x(16進値)を入力するだけで、インタープリターが自動的に変換します。
>>> 0xffff
65535