【Python】基数変換をしよう

python_logo

今回は10進数や8進数、16進数の基数変換を自由に行えるような関数を紹介します。

関数 説明
oct8進数へ変換
hex16進数へ変換
int10進数へ変換

8進数に変換

oct関数を使うことで変換可能です。

10進数や16進数、8進数自身から変換ができます。


>>> oct(1_000)
'0o1750'
>>> oct(0o1_000)
'0o1000'
>>> oct(0x1_000)
'0o10000'

16進数に変換

hex関数を使うことで変換が可能です。


>>> hex(1_000)
'0x3e8'
>>> hex(0o1_000)
'0x200'
>>> hex(0x1_000)
'0x1000'

10進数に変換

int関数を使うことで変換が可能です。


>>> int(1000)
1000
>>> int(0o1000)
512
>>> int(0x1000)
4096

Tips・注意点

さて、ほかにも基数の変換ができる方法があるので、それらも紹介します。

int の引数が文字列の場合、基数を指定して変換する

文字列の場合、デフォルトで10進数に変換いたします。

それ以外に変換する場合は基数を指定します。

キーワード引数を使う場合はbaseで指定します。


>>> int('1024')
1024
>>> int('1024',10)
1024
>>> int('0o1024',8)
532
>>> int('0x1024',base=16)
4132

eval関数を用いた10進数への変換

引数が文字列の場合eval関数も使えます。

10進数への変換になりますが。


>>> eval('0o70')
56
>>> eval('100')
100
>>> eval('0o100')
64
>>> eval('0x100')
256

ただし、この方法はコンパイルと実行という手間がかかるため、パフォーマンスが悪いのでやめましょう。

文字フォーマットによる変換


>>> "%o %d %x" % (64, 64, 64)                                                      
'100 64 40'
>>> "%o %d %x" % (0o64, 0o64, 0o64)                                                
'64 52 34'
>>> "%o %d %x" % (0x64, 0x64, 0x64)                                               
'144 100 64'

format関数

さらに、ビルトインクラスのstringにはformat関数があります。

これを用いても変換自体は可能です。


>>> "{0:d} {0:o} {0:x}".format(100)
'100 144 64'
>>> "{0:d} {0:o} {0:x}".format(0o100)
'64 100 40'
>>> "{0:d} {0:o} {0:x}".format(0x100)
'256 400 100'

【補足】位置指定しかできない変更

ほとんどの人はあまり関係ありません。

実はintの関数のキーワード引数としてxがあったので、これを指定することも可能でした。

Python3.6まで


>>> int(x=10)
10

それがPython3.7以降からできなくなっています。

Python3.7から


>>> int(x=1)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'x' is an invalid keyword argument for int()

同じような変更がbool(),float(),list(),tuple()でも行われています。

気を付けてください 笑

まとめ

いかがだったでしょうか?

Tipsのほうが多くなってしまいましたが、おそらく私が知らないだけでまだまだあるかもしれません。

分かり次第また更新しようと思います。

それでは以上になります。