2進数から8進数への変換ツール

2進数

8進数は、Unixのファイルパーミッション(chmod 755)、古いPDP時代のマニュアル、いくつかのマイコン向けツールチェーンで今も使われています。このツールは任意の2進数の文字列を右から3ビットずつまとめ、各グループを0から7までの8進数の桁に対応させます。出力は接頭辞なしの素の8進数の桁です。0755のように先頭ゼロが必要な言語や0o755のような0o接頭辞が必要な言語では、自分で付けてください。

2進数を8進数に変換する手順

  1. 1

    2進数の値を入力する

    空白は取り除かれます。長さは任意です。左端のグループは自動的に3ビットになるよう先頭にゼロが補われます。

  2. 2

    右から3ビットずつまとめる

    `111101100` は `111 101 100` になります。まとめる向きが重要で、常に右から左へ行います。

  3. 3

    各3ビットを対応させる

    000 = 0、001 = 1、010 = 2、そして 111 = 7 まで。各3ビットは必ず1つの8進数の桁に対応します。

  4. 4

    結果を読んでコピーする

    結果は`754`のような素の8進数の桁で、接頭辞は付きません。使う言語で先頭ゼロ(`0754`)や`0o`接頭辞(`0o754`)が必要なら、自分で付けてください。

3ビットと8進数の対応表

2進数 8進数
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

例: Unixのパーミッション

rwxr-xr-x は、所有者が読み取り・書き込み・実行の権限を持ち、グループとその他は読み取り・実行の権限を持つことを表します。2進数では 111 101 101 となり、これはそのまま8進数 755 にまとまります。chmod に渡すのとまったく同じ数値です。

8進数が役立つ場面

  • ファイルパーミッション: chmod 644umask 022stat -c %a はいずれも8進数で表します。
  • エスケープシーケンス: C言語の \100@(10進数で64)を表す8進数です。
  • 古いマシンコード: PDP-8、PDP-11、初期のDEC文書では、ワードサイズが3ビットの倍数だったため、オペコードを8進数で記載しています。
  • 見やすさ: 3ビットごとのまとまりは、16進数のように多くの文字を使わずに、2進数より速く読めます。

注意点

  • C言語では先頭ゼロが8進数を意味する: 0755 は8進数の755(= 10進数の493)、755 は10進数の755です。貼り付ける前に使っている言語を確認してください。
  • JavaScriptは旧式の8進数表記を廃止した: strictモードでは 0755 が拒否されます。代わりに 0o755 を使ってください。
  • まとめる向き: 左から右にまとめると、長さが3の倍数でないビット列では必ず誤った結果になります。

よくある質問

パーミッションのフラグが、役割(所有者・グループ・その他)ごとに3つずつ(読み取り・書き込み・実行)きれいなグループになっているからです。各3ビットは8進数の桁に1対1で対応するため、rwxr-xr-x は一手で 755 と読めます。

このツールの出力は接頭辞なしの素の桁です。コードで使うときは対象言語に合わせてください。C言語、Perl、シェルでは先頭に0、Python 3、Rust、Swiftでは0o、コマンドラインのchmodでは接頭辞なしです。

負の数には符号付きのビット幅(2の補数)が必要ですが、このツールには幅の指定がなく、すべての入力を符号なしとして扱います。負の値を変換するには、まず固定幅の2の補数のビット列に書き換えてから、そのビット列を変換してください。

いいえ。このツールが左端のグループを3ビットになるよう先頭にゼロを補います。1111001 111 になり、8進数では 17 です。

関連ツール

このツールは他の言語でも利用できます