web-dev-qa-db-ja.com

Pythonで16進文字列をintに変換

Pythonで16進文字列をintに変換するにはどうすればいいですか?

私はそれを "0xffff"あるいは単に "ffff"として持っているかもしれません。

654
Matt

0xプレフィックスがない場合は、ベースを明示的に指定する必要があります。それ以外の場合、指示する方法はありません。

x = int("deadbeef", 16)

0xプレフィックスを使用すると、Pythonは自動的に16進数と10進数を区別できます。

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

(この接頭部推測動作を呼び出すには、 must 0に指定する必要があります。2番目のパラメーターを省略すると、base-10と見なされます。)

933
Dan Lenski

int(hexString, 16)はトリックを行い、0xプレフィックスの有無にかかわらず動作します。

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

与えられた文字列sに対して:

int(s, 16)
44
Jorge Ferreira

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の名前は数字で始めることはできません。

26
Aaron Hall

上記のDanの答えに付け加えると、int()関数に16進数の文字列を指定した場合、基数を16に指定する必要があります。そうしないと、有効な値を指定したとは見なされません。 16進数の指定は、文字列に含まれていない16進数には不要です。

print int(0xdeadbeef) # valid

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

最悪の方法:

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

>>> hex_to_int("c0ffee")
12648430

しないでください!

Pythonでevalを使うのは悪い習慣ですか?

4
André Laszlo

またはast.literal_eval(これはevalとは異なり安全です):

ast.literal_eval("0xffff")

デモ:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 
2
U9-Forward

Python 2.7では、int('deadbeef',10)は機能しないようです。

以下は私のために働きます:

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

フォーマッタオプション '%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
1
Soundararajan

pythonインタープリターを使用している場合は、0x(16進値)を入力するだけで、インタープリターが自動的に変換します。

>>> 0xffff

65535
0
Maysara Alhindi