Pythonでの8進数(octal)変換について、初心者から中級者向けに体系的かつ詳細に解説します。
8進数は基数が8の数値体系で、0〜7の数字だけを使います。
これは、古くからコンピュータのシステム(特にUnix系のパーミッション設定など)で利用されてきました。
目次
Pythonにおける8進数の基本
8進数の表現方法
Pythonでは、8進数は0o
または0O
というプレフィックス(接頭辞)を使って表現します。
octal_number = 0o10
print(octal_number) # 8(10(8進数)= 8(10進数))
10進数 → 8進数 への変換
Pythonでは組み込み関数 oct()
を使って、10進数の整数を8進数の文字列に変換できます。
使用例
num = 64
octal_str = oct(num)
print(octal_str) # '0o100'
出力の意味
'0o100'
は8進数表現の文字列です。- 数値部分は
'100'
(8進数)、プレフィックス'0o'
は8進数であることを示しています。
プレフィックスなしで表示したいとき
print(oct(num)[2:]) # '100'
8進数 → 10進数 への変換
8進数表現の 文字列を10進数の整数に変換するには、int()
関数に基数(base=8
)を指定します。
使用例
octal_str = '100'
decimal_num = int(octal_str, 8)
print(decimal_num) # 64
プレフィックス付きでもOK
print(int('0o100', 8)) # 64
リテラルで直接8進数を記述する方法
Pythonでは 0o
を付けてリテラルとして8進数を書くことができます。
x = 0o755
print(x) # 493
これはUnix系OSで使われる「パーミッション設定」でよく使われる表現です(例:chmod 755
)。
数値変換の例まとめ
10進数 | oct() の出力 | 8進数文字列 | int(文字列, 8) の結果 |
---|---|---|---|
8 | '0o10' | '10' | 8 |
64 | '0o100' | '100' | 64 |
493 | '0o755' | '755' | 493 |
8進数での演算も可能
Pythonでは8進数リテラルも整数として扱われるので、通常の数値と同じように計算できます。
a = 0o10 # 8
b = 0o20 # 16
print(a + b) # 24
print(oct(a + b)) # '0o30'
注意点とエラー例
int('89', 8)
のように、8進数に存在しない数字を含めるとエラーになります。
int('89', 8)
# ValueError: invalid literal for int() with base 8: '89'
8進数は 0〜7
しか使えないので、8
や 9
は含めてはいけません。
応用:8進数のリストや桁揃え
10進数リストを8進数に変換してゼロ埋め(zfill)
for i in range(10):
print(oct(i)[2:].zfill(3)) # 3桁表示(例:001, 002, ...)
まとめ

操作 | 方法 |
---|---|
10進数 → 8進数 | oct(数値) |
8進数(文字列) → 10進数 | int(文字列, 8) |
8進数リテラル | 0o数字 (例:0o755 ) |
プレフィックス除去 | oct(数値)[2:] |
8進数演算 | 通常の整数と同様に可能 |
補足:他の進数との比較
種類 | プレフィックス | 例 | 組み込み関数 |
---|---|---|---|
2進数 | 0b | 0b1010 | bin() |
8進数 | 0o | 0o12 | oct() |
16進数 | 0x | 0x1F | hex() |
以上、Pythonの8進数変換についてでした。
最後までお読みいただき、ありがとうございました。