環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Pythonで2進数・8進数・16進数を10進数にする/10進数をformatで2進数・16進数にする

最終更新日 2023.02.18

Python で 2 進数から 10 進数、または 10 進数から 2 進数に変換するには int や format を使います。

  • n 進数から 10 進数にするときは int を使う
  • 10 進数から n 進数にするときは format を使う

後述するように bin や hex といった関数もありますが、余計なプレフィックスのついた文字列が返るため、実際は format を多用することになるでしょう。

Python で 2・8・10・16 進数を 10 進数にする

2 進数などの数を 10 進数にするときは int 関数を使います。第二引数にもとの進数を指定します。

a = int('1001', 2)  # 2進数
b = int('75', 8)  # 8進数
c = int('91', 10)  # 10進数
d = int('c3', 16)  # 16進数

print(a)  # 9
print(b)  # 61
print(c)  # 91
print(d)  # 195

2 進数の 1001 は 1 × 8 + 1 = 9 です。8 進数の 75 は 7 × 8 + 5 = 61 となります。

Python で 10 進数を 2 進数にする

10 進数の整数を 2 進数にするには bin を使います。これは Python のビルト・イン関数です。

a = bin(5)

print(a)  # 0b101
print(type(a))  # <class 'str'>

bin は 0b というプレフィックスをつけた文字列を返します。

  • 文字列が返る
  • 0b プレフィックスがつく

6 から 9 までを 2 進数で表示してみましょう。

a = bin(6)
b = bin(7)
c = bin(8)
d = bin(9)

print(a)  # 0b110
print(b)  # 0b111
print(c)  # 0b1000
print(d)  # 0b1001

プレフィックスを除きたいときは bin でなく format を使います。

a = format(6, 'b')
b = format(7, 'b')
c = format(8, 'b')
d = format(9, 'b')

print(a)  # 110
print(b)  # 111
print(c)  # 1000
print(d)  # 1001

print(type(a))  # <class 'str'>

format も文字列を返しています。

Python で 10 進数を 16 進数にする

10 進数を 16 進数にするときは Python のビルト・イン関数 hex を使います。

a = hex(18)

print(a)  # 0x12
print(type(a))  # <class 'str'>

hex は 0x というプレフィックスのついた文字列を返します。

a = hex(15)
b = hex(16)
c = hex(17)
d = hex(18)
e = hex(19)

print(a)  # 0xf
print(b)  # 0x10
print(c)  # 0x11
print(d)  # 0x12
print(e)  # 0x13

0x が不要のときは format を使います。第二引数に x を指定します。

a = format(15, 'x')

print(a)  # f
print(type(a))  # <class 'str'>

いろいろな値で試してみましょう。

a = format(254, 'x')
b = format(255, 'x')
c = format(256, 'x')
d = format(257, 'x')

print(a)  # fe
print(b)  # ff
print(c)  # 100
print(d)  # 101

0x のない文字列が出力されています。