2012-02-09 13 views
77

私はhex()関数が16進データを10進数に変換するPerlコードをいくつか持っています。 Pythonでどうすればいいですか?16進数を10進数に変換するにはどうすればよいですか?

+1

をあなたは「小数」にデータを変換したいあなたは確かにいますか? Perl関数は、単に16進文字列ではなく、16進文字列を整数に変換します。 –

+0

@SvenMarnach私はこのperl hex()マニュアルを使用します。http://www.misc-perl-info.com/perl-hex.html "この関数: は、引数として16進文字列(または評価後に返される式)を持ちます は小数に対応する値 " –

+1

@Sir D:その記事は非常にひどくフレーズが返されます。 Svenが述べているように、 'hex 'は16進文字列を整数値に変換します(これはバイナリで内部的に格納されますが、基本的に単純に基数のない数値です)。 'print'の呼び出しはその値を10進文字列に変換して出力します。 – Borodin

答えて

139

は "進データ" による場合は、変換するために、あなたは整数に変換し

i = int(s, 16) 

を使用することができます

s = "6a48f82d8e828ce82b82" 

形式の文字列と

str(i) 

を意味しますそれは10進文字列になります。

+14

私はPythonが大好きです。 –

+0

負の16進数の場合、これは機能しません。 –

+0

@EricWangこれは、負の数については完全に正常に動作します:http://ideone.com/IHOQvp。固定幅の2の補数形式で符号化された負の数を持たない限り、ここで求められたものとは異なる問題になります。 (ヒント:その場合は 'struct'モジュールを使用してください。) –

26
>>> int("0xff", 16) 
255 

または

>>> int("FFFF", 16) 
65535 

Read the docs

+2

int(0xff)は正しいことを行います。それが文字列として渡される場合は、明示的な基数が必要です。 – cassm

12

リテラルevalを使用することができます

>>> ast.literal_eval('0xdeadbeef') 
3735928559 

それともintへの引数としてベースを指定:

>>> int('deadbeef', 16) 
3735928559 
+0

これは完璧です! =] – GalDude33

関連する問題