Python|2進数、8進数、16進数の数値・文字列を相互変換する:bin() , oct() , hex()

1. はじめに

Pythonで数値を扱う際、2進数・8進数・16進数といった異なる進数表記に変換することが必要になる場面があります。
例えば、ビット演算ハードウェア制御暗号処理などでは、数値をそれぞれの進数に変換して扱うことがよくあります。

本記事では、Pythonのbin()oct()hex()関数を用いて、数値を2進数・8進数・16進数に変換する方法や、それらの文字列から元の数値に戻す方法までを丁寧に解説します。

コード例とともに、初心者にもわかりやすい説明を心がけているので、Pythonの基礎をしっかり身につけたい方におすすめの記事です。

 

2. bin() , oct() , hex() の基本解説と使い方

2.1 bin():10進数→2進数に変換

bin()関数は、整数を2進数の文字列に変換します。接頭辞 '0b' が付きます。

# 10進数を2進数に変換
num = 10
binary = bin(num)
print(binary)

実行結果:

0b1010

2.2 oct():10進数→8進数に変換

oct()関数は、整数を8進数の文字列に変換します。接頭辞 '0o' が付きます。

# 10進数を8進数に変換
num = 10
octal = oct(num)
print(octal)

実行結果:

0o12

2.3 hex():10進数→16進数に変換

hex()関数は、整数を16進数の文字列に変換します。接頭辞 '0x' が付きます。

# 10進数を16進数に変換
num = 255
hexa = hex(num)
print(hexa)

実行結果:

0xff

2.4 文字列から元の数値へ戻す(int()関数)

進数表記された文字列から、int()関数を使って10進数に戻すことも可能です。

# 2進数文字列を10進数に変換
binary_str = "0b1010"
decimal = int(binary_str, 2)
print(decimal)

実行結果:

10

 

3. よくある使い方・応用例

3.1 文字列フォーマットで接頭辞を除く

出力を見やすくするために、接頭辞なしで出力するには format() 関数や f文字列 を使います。

num = 255

# format関数を使って接頭辞なしで表示
print(format(num, 'b'))   # 2進数
print(format(num, 'o'))   # 8進数
print(format(num, 'x'))   # 16進数(小文字)
print(format(num, 'X'))   # 16進数(大文字)

実行結果:

11111111  
377  
ff  
FF

3.2 変換を関数化してまとめる

複数の進数に一括で変換するユーティリティ関数を定義することで、再利用しやすくなります。

def convert_number(n):
    return {
        "binary": bin(n),
        "octal": oct(n),
        "hex": hex(n)
    }

# 実行
result = convert_number(100)
print(result)

実行結果:

{'binary': '0b1100100', 'octal': '0o144', 'hex': '0x64'}

3.3 ビット演算の補助に使う

2進数の表示は、ビット演算の確認やデバッグにも有効です。

a = 5  # 0b0101
b = 3  # 0b0011
c = a & b

print(f"a: {bin(a)}")
print(f"b: {bin(b)}")
print(f"a & b: {bin(c)}")

実行結果:

a: 0b101  
b: 0b11  
a & b: 0b1

 

4. 注意点・エラー対策

4.1 int()で文字列変換する際の注意

int("1010") ではなく int("1010", 2) のように基数を明示しないと、誤った値になる可能性があります。

# 間違った例
print(int("1010"))  # これは10進数として解釈される → 1010

# 正しい例(2進数として解釈)
print(int("1010", 2))  # → 10

実行結果:

1010  
10

4.2 文字列の接頭辞を省略する場合のエラーに注意

接頭辞がないとどの進数か判断できず、間違った解釈をしてしまう場合があります。

 

5. まとめ

  • bin(), oct(), hex() で整数を2/8/16進数へ変換できる
  • int(文字列, 基数) で文字列から数値へ戻すことが可能
  • フォーマット関数で接頭辞を取り除くこともできる

Pythonで2進数・8進数・16進数を自由に変換できると、数値操作・ビット演算・ネットワーク制御などの場面でも非常に役立ちます。
学習のコツは、「接頭辞」や「基数指定」などのルールをしっかり覚えることです。

実務でも「設定ファイルのバイト値の確認」「バイナリファイルの解析」などに活用される知識なので、しっかりマスターしておきましょう!

タイトルとURLをコピーしました