900

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

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

4

12 に答える 12

1309

0x プレフィックスがない場合は、ベースを明示的に指定する必要があります。そうしないと、次のように伝える方法がありません。

x = int("deadbeef", 16)

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

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

(このプレフィックス推測動作を呼び出すには、base として指定する必要があります。2 番目のパラメーターを省略すると、base-10 が想定されます。)0int()

于 2008-10-16T17:37:52.340 に答える
202

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

>>> int("a", 16)
10
>>> int("0xa", 16)
10
于 2008-10-16T17:32:10.963 に答える
52

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 進数のプレフィックスがないと0xint推測するのに十分な情報がありません。

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

于 2016-05-14T02:50:29.187 に答える
49

任意の文字列 s に対して:

int(s, 16)
于 2008-10-16T17:32:32.443 に答える
16

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

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
于 2012-06-30T16:25:01.510 に答える
8

最悪の方法:

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

>>> hex_to_int("c0ffee")
12648430

これをしないでください!

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

于 2014-01-17T13:20:15.807 に答える
1

フォーマッタ オプション '%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
于 2013-06-22T11:10:32.680 に答える
-2

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

以下は私にとってはうまくいきます:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0
于 2015-05-16T00:13:25.560 に答える
-3

「0x」プレフィックスを使用すると、eval 関数も使用できます

例えば

>>a='0xff'
>>eval(a)
255
于 2012-08-21T06:39:36.013 に答える