このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】整数を2,8,16進数の文字列に変換する関数

整数を2,8,16進数の文字列に変換する関数

 整数を2進数、8進数、16進数の文字列に変換することは、デバッグや低レベルのデータ操作、さらにはフォーマットされた出力を生成する際に非常に役立ちます。Pythonでは、これらの変換を行うための組み込み関数(bin, oct, hex)や、f文字列の書式指定機能が用意されており、値を簡単に目的の進数表現に変換することが可能です。
 ここでは、これらの関数の基本的な使い方と、書式指定の方法について、具体例と表を交えて解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.基本の変換関数

1.1. bin関数

bin関数は、整数を2進数の文字列に変換します。返される文字列は先頭に "0b" が付きます。

【構文】

bin(整数)
説明
bin(200)200を2進数に変換("0b11001000")
# 例: 200を2進数に変換する
binary_value = bin(200)
print("bin(200):", binary_value)  # 出力例: bin(200): 0b11001000

実行結果

bin(200): 0b11001000

解説

200をbin関数に渡すと、"0b11001000" という2進数表現の文字列が返されます。

1.2. oct関数

oct関数は、整数を8進数の文字列に変換します。返される文字列は先頭に "0o" が付きます。

【構文】

oct(整数)
説明
oct(200)200を8進数に変換("0o310")
# 例: 200を8進数に変換する
octal_value = oct(200)
print("oct(200):", octal_value)  # 出力例: oct(200): 0o310

実行結果

oct(200): 0o310

解説

200をoct関数に渡すと、"0o310" という8進数表現の文字列が返されます。

1.3. hex関数

hex関数は、整数を16進数の文字列に変換します。返される文字列は先頭に "0x" が付きます。

【構文】

hex(整数)
説明
hex(200)200を16進数に変換("0xc8")
# 例: 200を16進数に変換する
hex_value = hex(200)
print("hex(200):", hex_value)  # 出力例: hex(200): 0xc8

実行結果

hex(200): 0xc8

解説

200をhex関数に渡すと、"0xc8" という16進数表現の文字列が返されます。

2.f文字列を使った進数変換

2.1. f文字列による基本的な記法

 Pythonのf文字列は、文字列リテラルの先頭に f を付けることで、波括弧 {} 内に変数や式を直接埋め込むことができます。進数変換の場合、書式指定子として b(2進数)、o(8進数)、x(16進数)を使います。

【構文】

f'{整数:書式指定}'
書式指定説明
b2進数表現(接頭辞なし)
o8進数表現(接頭辞なし)
x16進数表現(接頭辞なし、アルファベットは小文字)
# 例: f文字列を使って200を各進数表現に変換する
print(f"Binary: {200:b}")      # 出力例: Binary: 11001000
print(f"Octal: {200:o}")       # 出力例: Octal: 310
print(f"Hexadecimal: {200:x}") # 出力例: Hexadecimal: c8

実行結果

Binary: 11001000
Octal: 310
Hexadecimal: c8

解説

  • f文字列内では、{200:b} により200が2進数で表示され、{200:o} で8進数、{200:x} で16進数の値が得られます。
  • 先頭の "0b", "0o", "0x" は表示されませんが、必要な場合は書式指定子の前にシャープ(#)を付けることで付加できます。

2.2. シャープ付きの書式指定

シャープ(#)を使うと、進数表現の接頭辞が付加されます。

print(f"Binary with prefix: {200:#b}")      # 出力例: Binary with prefix: 0b11001000
print(f"Octal with prefix: {200:#o}")       # 出力例: Octal with prefix: 0o310
print(f"Hexadecimal with prefix: {200:#x}") # 出力例: Hexadecimal with prefix: 0xc8

実行結果

Binary with prefix: 0b11001000
Octal with prefix: 0o310
Hexadecimal with prefix: 0xc8

解説

 #b, #o, #x を使うことで、それぞれの進数表現に "0b", "0o", "0x" が自動的に付加され、より明確な形式で出力されます。

まとめ

整数を2進数、8進数、16進数の文字列に変換するための関数は、bin, oct, hexの3つが代表的です。

  • bin関数は、整数を"0b"付きの2進数表現に変換します。
  • oct関数は、整数を"0o"付きの8進数表現に変換します。
  • hex関数は、整数を"0x"付きの16進数表現に変換します。

 さらに、f文字列を使えば、書式指定子を利用して簡潔に進数変換が可能となり、必要に応じて接頭辞を付加することもできます。
 これらの機能を活用することで、数値を見やすく整形し、デバッグやレポート作成などさまざまな場面で効果的に利用することができます。