プログラミングにおいて、10進数の数値をコンピュータが解釈しやすい2進数や、メモリダンプなどで使われる16進数の形式に変換して表示したい場面があります。
Pythonには、数値をこれらのN進数表記の文字列に変換するための便利な組み込み関数が用意されています。
この記事では、bin(), oct(), hex() の基本的な使い方と、変換結果から接頭辞(プレフィックス)を取り除く方法について解説します。
目次
各進数への変換関数一覧
Pythonで数値(整数)を各進数の文字列に変換する関数は以下の通りです。
| 関数名 | 変換後の進数 | 接頭辞 |
bin(x) | 2進数 (Binary) | 0b |
oct(x) | 8進数 (Octal) | 0o |
hex(x) | 16進数 (Hexadecimal) | 0x |
これらの関数は、変換結果を必ず**文字列(str型)**で返します。また、先頭にはその進数を表す接頭辞が自動的に付与されます。
具体的な使用例
1. 2進数への変換: bin()
整数を2進数形式の文字列に変換します。
# 10進数の 255 を2進数に変換
val_bin = 255
result_bin = bin(val_bin)
print(f"元の値: {val_bin}")
print(f"変換後: {result_bin}")
print(f"型: {type(result_bin)}")
実行結果:
元の値: 255
変換後: 0b11111111
型: <class 'str'>
2. 8進数への変換: oct()
整数を8進数形式の文字列に変換します。
# 10進数の 64 を8進数に変換
val_oct = 64
result_oct = oct(val_oct)
print(f"元の値: {val_oct}")
print(f"変換後: {result_oct}")
実行結果:
元の値: 64
変換後: 0o100
3. 16進数への変換: hex()
整数を16進数形式の文字列に変換します。カラーコードやメモリアドレスの表現によく使われます。
# 10進数の 65535 を16進数に変換
val_hex = 65535
result_hex = hex(val_hex)
print(f"元の値: {val_hex}")
print(f"変換後: {result_hex}")
実行結果:
元の値: 65535
変換後: 0xffff
接頭辞(0b, 0o, 0x)なしで変換する方法
bin(), oct(), hex() は便利ですが、常に 0b などの接頭辞が付きます。これらが不要な場合は、組み込み関数の format() を使用するのがスマートです。
第2引数にフォーマット指定子(b, o, x)を渡すことで、接頭辞なしの文字列を取得できます。
number = 12345
# 2進数 (binary)
print(f"2進数: {format(number, 'b')}")
# 8進数 (octal)
print(f"8進数: {format(number, 'o')}")
# 16進数 (hexadecimal) - 小文字
print(f"16進数(小文字): {format(number, 'x')}")
# 16進数 (hexadecimal) - 大文字
print(f"16進数(大文字): {format(number, 'X')}")
実行結果:
2進数: 11000000111001
8進数: 30071
16進数(小文字): 3039
16進数(大文字): 3039
まとめ
bin(int): 2進数文字列(0b...)に変換oct(int): 8進数文字列(0o...)に変換hex(int): 16進数文字列(0x...)に変換- 接頭辞が不要な場合は
format(int, 'b')などを使用すると便利です。
