§

Options

§

2進数(基数2)

§

8進数(基数8)

§

10進数(基数10)

§

16進数(基数16)

§

任意の基数

ルネサス エレクトロニクスのマイコン(RA/RXシリーズ)のファームウェア開発では、JTAGデバッガのメモリダンプを16進数で読み取り、レジスタアドレスを10進数オフセットに換算する作業が日常的です。JAXAの衛星テレメトリ解析では、16進ストリームのフレームヘッダーを2進数に展開してビットフラグを確認します。NEC アビオニクスの組み込みログでは、軍用通信プロトコルのバイナリログを8進数・16進数の両方向で突き合わせて障害原因を特定します。このツールは変換の手作業をなくし、解析・デバッグに集中できる環境を提供します。

進数変換の仕組み

すべての位取り記数法は、数値を基数の累乗に各桁を掛けた和として表します。基数を変換するとは、同じ数値を異なるベキ級数で書き直すことを意味します。

  1. 入力の文字セットを検証する. 各基数には使用できる桁のセットがあります。2進数は0と1、8進数は0〜7、10進数は0〜9、16進数は0〜9とA〜Fを受け付けます。選択した文字セット外の文字があると、変換が実行される前にインラインエラーが表示されます。
  2. 数値を解析する. JavaScriptのNumber型に収まる値(2^53-1まで)はparseInt(text, base)を使って処理します。それを超える場合はBigIntにフォールバックし、任意の大きな整数でも正確に変換します。
  3. 各対象基数に再変換する. 解析された値はNumber.prototype.toString(base)またはBigInt.prototype.toString(base)を使って各出力基数に変換されます。4つの標準ペイン(2進数・8進数・10進数・16進数)と任意基数ペインが同時に更新されます。
  4. 書式を適用する. プレフィックス切り替えで2進数・8進数・16進数の出力の先頭に0b、0o、または0xを追加します。桁グループ化は2進数4桁ごとと16進数2桁ごとにアンダースコアを挿入します。16進数の大文字/小文字切り替えでA〜Fの表示形式を選択できます。
  5. ライブクロスペイン同期. いずれかのペインを編集すると、100ミリ秒のデバウンス処理後に再変換が実行され、他のペインが更新されます。入力中のペインがキーストロークごとに正の入力元として扱われます。

進数変換ツールを使う理由

  • メモリダンプの解読. デバッガ、逆アセンブラ、コアダンプビューアはアドレスとレジスタ値を16進数で表示します。これを10進数に変換することで、同じトレース内の他の場所で報告されるカウント、サイズ、オフセットと比較できるようになります。
  • カラーコードの操作. CSS、デザインツール、画像形式は#d2511aのような16進トリプレットで色を表現します。各ペアを10進数に変換すると、カラーピッカーやアクセシビリティチェッカーが期待するrgb(210, 81, 26)形式に変換できます。
  • ファイルパーミッションのデコード. UNIXのchmod値は8進数で記述されます。755は、各8進数の桁を3ビットのバイナリに変換するとrwxr-xr-xを意味します。このツールは1ステップでその対応を示すため、manページを参照せずにパーミッション設定を確認できます。
  • ビットフラグのデバッグ. ネットワークプロトコル、カーネルシステムコール、ハードウェアレジスタは多数のブールフラグを1つの整数に詰め込んでいます。2進数で整数を読むと、どのビットが立っているかが一目でわかります。フラグが有効にならない原因を追うときに必要な情報です。

主な用途

進数変換は、数値が単なるカウント以上の意味を持つ日常的な開発・セキュリティ・ハードウェア作業で必要になります。

  • 組み込みファームウェア:JTAGプローブからの16進ダンプを読み取り、関数のアドレスを特定し、デバッガスクリプトが受け付ける10進オフセットでブレークポイントコマンドを記述する。
  • ネットワークセキュリティ:ドット付き10進で表示された32ビットネットマスクを2進数に変換してプレフィックス長を数え、ACLルール用のCIDR形式で記述する。
  • CTFパズルと暗号チャレンジ:XOR下で漏洩した鍵フラグメントを候補平文と比較しながら、16進数・10進数・2進数を行き来する。

変換の実例

10進数ペインに255を入力します。16進数ペインはFF(プレフィックス表示オンなら0xFF)、2進数ペインは11111111(グループ化あり:1111_1111)、8進数ペインは377に更新されます。任意基数ペインの基数を36に設定すると、同じ値が73と表示されます。10進数ペインに123456789012345678901234567890のような大きな値を入力すると、16進数ペインはBigIntパスを使用して18EE90FF6C373E0EE4E3F0AD2と表示します。

FAQ

数値の基数とは何ですか?

数値の基数(または基数、ラジックス)とは、位取り記数法が次の桁に繰り上がるまでに使う異なる数字の数です。10進数(基数10)は0〜9を使い、2進数(基数2)は0と1だけを使い、16進数(基数16)は0〜9にA〜Fを加えて使います。基数を変えても数値そのものは変わりません — 桁の書き方とグループ化の方法だけが変わります。

プログラミングで16進数を使う理由は何ですか?

16進数の1桁はちょうど4つのバイナリビットに対応するため、2桁で1バイト、8桁で32ビットワードを表現できます。これにより16進数はメモリアドレス、レジスタ内容、カラートリプレット、暗号鍵を人間が読める形式で最もコンパクトに表現できます。0xFFを読むほうが11111111を読むより速く、必要なときにビットパターンもすぐ確認できます。

基数36を超える変換はできますか?

このツールは基数36までで止まっています。それがネイティブJavaScriptのparseInttoString APIの上限であり、0〜9に続いてA〜Zを桁のアルファベットとして受け付けます。基数37〜62はカスタムアルファベットで可能です(ビットコインアドレスで使われるBase58が一例です)が、各上位基数には固有の正規桁順序が必要なため、別ツールとして管理されます。

負の数や小数は扱えますか?

負の整数はすべての基数でマイナス記号付きで表示されます。Number.prototype.toStringと同じ動作です。選択したビット幅(8、16、32、64)での2の補数表現は別途追加予定の機能です。浮動小数点の基数変換もこのバージョンの対象外です。このツールは整数値のみを扱います。

進数変換は、ファームウェア・セキュリティ・グラフィックス作業で繰り返し発生する小さな作業です。ブラウザのタブ内でNodeやV8が使うのと同じ算術プリミティブを使って実行することで、作業を素早く、データを手元に保つことができます。