arrow_backフィールドノートに戻る
COMPUTER SCIENCE 公開日 5 Aug 2026

バイナリ、16進法、データユニット解説

プログラミング、ネットワーク、フォレンジック作業で使われるバイナリ、16進法、データユニットの慣例についての実践的な用語集です。

16進エディタで検査するすべてのバイト、計算するサブネットマスク、ツールが報告するファイルサイズは、すべて少数の数値体系とユニット慣例に依存しています。これらを間違えるとバッファサイズを誤判断し、メモリダンプを読み違え、1 KBが1000バイトなのか1024バイトなのかで同僚と議論することになります。

バイナリ:コンピュータが実際に使う基数

バイナリは2進法です。0と1だけです。1つのバイナリ桁はビットです。8ビットをグループ化するとバイトが得られます。バイトは256個の異なる値を表現できます(符号なしで0~255、符号付き2の補数で-128~127)。

01001000 を見かけたら、これは10進法では72で、ASCIIコードでは'H'です。手計算で変換するには、右端のビットから2の累乗を合計します:2^6 + 2^3 = 64 + 8 = 72。python3 -c "print(bin(72))"xxd のようなツールが瞬時に処理しますが、ビットマスクをリバースエンジニアリングしたり、TCPヘッダのフラグ値を計算したりする際は、この計算を理解していることが重要です。

16進法:バイナリの短縮表記

16進法はbase 16で、0-9とA-Fを使います。バイナリは規模が大きいと読みにくく、10進法はバイト境界にきれいにマップしないため存在します。1つの16進桁は正確に4ビットを表現し、2つの16進桁は1つのバイト全体を表現します。0x00から0xFFは無駄なく256のバイト値をすべてカバーします。

これが、xxdhexdump -C、逆アセンブラのメモリビューなどのツールで16進ダンプがデフォルトである理由です。ファイルの開始時に 0x4D 0x5A を見かけたら、これはWindows PE実行ファイルを識別するMZヘッダです。メモリアドレス、色コード(#FF5733)、MACアドレス、IPv6アドレスは、すべて慣例として16進法で記述されます。基礎となるバイトとニブル構造にこれほどきれいにマップするからです。

16進法から10進法への変換:0x4D = (4 × 16) + 13 = 77。Pythonでは、int('4D', 16) で手計算なしで完了し、hex(77) で逆方向に変換できます。

バイナリ、10進法、16進法が実践で実際に組み合わさるところ

IPアドレスは3つがすべて衝突する良い例です。192.168.1.1 のようなIPv4アドレスは実際には4つのバイトです:バイナリでは 11000000.10101000.00000001.00000001、16進法では C0.A8.01.01。サブネッティング計算(2つのアドレスが同じネットワーク上にあるかどうかを判断する)は、根本的にはサブネットマスクに対するバイナリAND操作ですが、便宜上ドット区切り10進法で記述します。

デジタルフォレンジックとマルウェア分析では、これらの表現間で常に変換しています。逆アセンブラはオペコードを16進法で表示しますが、CPUは生のバイナリを実行し、レジスタ値はコンテキストに応じて10進法のオフセットまたはASCII文字列として解釈されることが多いです。0x41 が65という数字でありASCIIの'A'であることを知ることは、手動分析を大幅に高速化するパターン認識の種類です。

データユニット:1000対1024の問題

ここで実際に問題が起きます。ストレージメーカー、ファイルシステム、オペレーティングシステムは常に

この記事は AI の支援を受けて執筆し、Korra Studio の Michal Pilch(CISSP)が確認のうえ公開しました。

さらに先へ進む準備はできていますか?

これは Korra Studio ナレッジベースの 1 つのノートです。プラットフォームはすべてのトピックと 1 対 1 メンタリングをペアで提供します。

無料で始めるarrow_forward