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

→
10進数 = 各8進数の桁 × 8の位の重みを合計する

8進数から10進数へ:モードやマスク、古いダンプを読む

この変換でわかること

基数8で書かれた値を読み、基数10で書き直します。モードがすでに8進数で書かれているとき、つまりchmodやlsが期待する形式のときに必要になる向きです。得られた数値をスクリプトや設定ファイル、周囲のコードが10進数を前提にしている比較へ渡す場面で使います。

位の重みは8の累乗

右端から順に、重みは1、8、64、512…となります。755なら7 × 64 + 5 × 8 + 5で493です。ただし10進数にした時点で、桁はもはや3つの独立した権限ではありません。8進数表記の読みやすさを支えていた構造は、10進数への変換そのものによって失われる点に注意してください。

8進数と10進数の変換表

権限モードやマスクと、その10進数の値です。スクリプトで扱うには10進数が便利ですが、読むには8進数のままのほうがよく、多くの現場では両方を記録しています。

8進数10進数
00
11
77
108
1715
10064
377255
644420
755493
1000512

8進数の用途が権限に絞られた理由

基数は機械のまとまり方と一致したときに居場所を得ます。8進数は6ビットや12ビットのワードに合っていましたが、8ビットのバイトが当たり前になると自然な区切りは4ビット、つまり16進数になりました。権限は本当に9ビット幅で3つの組に均等に分かれるため、基数の都合とデータの構造がいまも一致しています。

権限の計算を10進数でやらない

10進数の493に64を足して読み取り権限を与えるのは正しくありません。その64は10進数の64で、8進数のモードに立てたいビットとは別物です。権限の計算は400や40のような8進数の値で行い、保存や表示のためにだけ変換してください。

よくある質問

8進数から10進数へ手計算で変換するには?

各桁に位の値(右から1、8、64、512…)を掛けて足し合わせます。755なら7 × 64 + 5 × 8 + 5、つまり448 + 40 + 5で493になります。

スクリプトで chmod 755 が493と表示されるのはなぜですか?

スクリプトがモードをただの10進整数として読んでいるからです。ファイルシステムが保持しているビットはどちらでも同じで、違うのは表記だけです。8進数の形はコメントや頭の中に残し、10進数を前提とするコードと接する境界でだけ変換してください。

先頭の0には意味がありますか?

数値としては意味がありません。0755と755は同じ値です。ただし「これは8進数だ」と示す目印としては有用で、8進数のリテラルに先頭の0を要求する言語もあります。本ツールは入力の先頭0や0oの接頭辞を受け付け、出力には付けません。

8進数の小数も変換できますか?

変換できます。分母が2の累乗かどうかで割り切れるかが決まるため、8進数でも小数が割り切れる場合とそうでない場合があります。割り切れないときは結果を切り捨て、正確な答えであるかのように丸めず、その旨をはっきり示します。

扱える8進数の桁数に上限はありますか?

実際のモードやマスクよりはるかに長い値まで扱えます。整数のまま計算するため、長い入力でも浮動小数点の電卓のように丸められた結果ではなく、全桁が正しい値が返ります。

以下のコードをコピーしてご自身のウェブサイトに貼り付けると、この変換ツールを追加できます。

<!-- 8進数から10進数 -->
<iframe src="https://unitflow.net/ja/embed/octal-to-decimal" title="8進数から10進数" width="100%" height="420" loading="lazy" style="border:0;max-width:100%;display:block"></iframe>
<p><a href="https://unitflow.net/ja/octal-to-decimal" target="_blank" rel="noopener">UnitFlow 提供</a></p>