Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

Linuxのbcコマンドを16進数計算機として使う方法|コマンドラインで簡単に基数変換するチュートリアル

LinuxをはじめとするUnix系OSには、ほぼ必ず「bc」という基本計算言語(basic calculator)が含まれています。GNUスイートが導入されている環境であれば、追加インストールなしですぐに使えるのが魅力です。bcの構文はC言語に非常によく似ており、コマンドラインから直接16進数計算機として活用できます。これを覚えておけば、スマホに16進数や8進数の変換アプリをダウンロードする必要はもうありません。

開発者はもちろん、学校の課題に取り組む学生にとっても心強い味方となるでしょう。まずはターミナルを開くところから始めます。Ubuntuでは「Ctrl + Alt + T」のショートカットキー、またはUnity Dashで「terminal」と検索すれば起動できます。Xfceデスクトップ環境なら、Whiskerメニューやアプリケーションメニューの「システムツール」から起動してもOKです。macOSユーザーは「ユーティリティ」フォルダからターミナルを開くか、Dockにピン留めしておけばワンクリックでアクセスできます。bcはLinuxだけでなく、現在ではほとんどのUnix系OSに標準搭載されています。

方法1:bcで10進数と16進数を相互変換する

10進数の127を16進数に変換したい場合は、次のコマンドを入力してEnterキーを押します。

echo 'obase=16;127' | bc

結果として「7F」が表示されます。127の部分は任意の整数に置き換え可能です。逆に16進数を10進数へ戻したいときは、以下のように入力します。

echo 'ibase=16;obase=A;7F' | bc

手順はこれだけで、有効な16進数であればいつでも利用できます。また、これは正規のUnixスタイルのコマンドなので、シェルスクリプトに組み込むことも自由自在です。「数値の基数を素早く行き来して変換したい」ときに、いつでもコマンドラインから呼び出せるのは大きなメリットですね。

方法2:2進数と16進数をbcで変換する

2進数を16進数に変換する場合は、コマンドプロンプトで次のように入力します。

echo 'obase=16;ibase=2;111010001' | bc

Enterキーを押すと「1D1」という結果が返ってきます。111010001の部分は、そのときに変換したい任意の2進数に差し替えてください。もちろん逆方向の変換も可能で、16進数を2進数に戻すこともできます。

echo 'obase=2;ibase=16;1D1' | bc

と入力してEnterを押せば、元の2進数「111010001」が返ってきます。1D1の部分も、他の有効な16進数値に自由に置き換えられます。

頻繁に使う予定があるなら、次の2点を押さえておきましょう。

  • 16進数に含まれる英字(A〜F)は必ず大文字で入力します。bcは小文字を代数変数として扱うためです。
  • これらのコマンドはすべて一般ユーザー権限で実行でき、root権限は不要です。最近のLinuxやUnixであれば、どのバージョンでも同様に動作します。

方法3:bcを本格的な16進数計算機として使う

bcは単なる基数変換ツールではなく、16進数のまま四則演算を行うこともできます。すべてのユーザーが必要とする機能ではありませんが、プログラマーがメモリ上の2つのアドレスの差を求めたいケースなどで役立ちます。高校や大学のコンピュータサイエンスの課題でも定番のテーマです。

例えば、16進数のEE65522DからC3EFAF86を引き算したいとしましょう。その場合は次のコマンドを実行します。

echo 'ibase=16;EE65522D-C3EFAF86' | bc

答えを16進数で表示したい場合は、obaseも合わせて指定します。

echo 'obase=16;ibase=16;EE65522D-C3EFAF86' | bc

もちろん、他の演算も可能です。echo 'obase=16;ibase=16;EE65522D*C3EFAF86' | bc と入力すれば2つの値を掛け算できますし、足し算には + 演算子を使用できます。

ここで注意したいのが割り算です。/ 演算子を使うと余りは返されません。商と余りの両方が欲しい場合は、% 演算子(モジュロ)を使います。

例えば echo 'obase=16;ibase=16;EE65522D%C3EFAF86' | bc を実行すると「2A75A2A7」が返ります。これは、この式の商が「1」で余りが「2A75A2A7」になるためです。両方の値を確認したいときは、まず / で割り算を実行し、続いて % で剰余を求めるとよいでしょう。

著者について

Linuxのbcコマンドを16進数計算機として使う方法|コマンドラインで簡単に基数変換するチュートリアル

Kevin Arrows(ケビン・アローズ)

Kevin Arrowsは、10年以上の業界経験を持つベテランの技術スペシャリストです。Microsoft認定技術スペシャリスト(MCTS)の資格を保有し、最新の技術動向を追いかけることに強い情熱を注いでいます。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど幅広い分野で執筆活動を行っており、複雑な技術的概念を明快かつ簡潔に説明する能力で、業界内外から高い評価を得ています。

  1. UbuntuでChromeアンインストール時に「サブプロセス /usr/bin/dpkg がエラーコード(1)を返しました」と出る原因と対処法

    Google Chromeは、高速な動作と使いやすいインターフェースを備えた、世界で最も利用されているウェブブラウザの一つです。ほぼすべてのオペレーティングシステムに対応しており、10億人以上のユーザーに愛用されています。しかしながら最近、Ubuntu環境でChromeをアンインストールする際に問題が発生するという報告が多数寄せられています。具体的には、Chromeのパッケージを削除しようとすると、「サブプロセス /usr/bin/dpkg がエラーコード(1)を返しました」というエラーが表示されてしまうのです。「サブプロセス /usr/bin/dpkg がエラーコード(1)を返しました」エラ

  2. LinuxでドライブをexFATにフォーマットする方法【ステップバイステップガイド】

    WindowsとLinuxの間でファイルをやり取りするなら、ドライブをexFATまたはNTFSファイルシステムでフォーマットしておくと作業が格段にスムーズになります。Windows、macOS(OS X)、Linuxはもちろん、Sony Xperia ZなどのモバイルデバイスでもexFATを読み取れるため、exFATに統一したいというユーザーも多いはずです。プロプライエタリなファイルシステムではありますが、フラッシュメディアや外付けドライブ向けに最適化されている点が評価され、Linuxユーザーの間でも人気が高まっています。Linuxはntfs-3gドライバーを通じてNTFSボリュームを標準サポ