ASCII エンコードの解説:テキスト、10進数、16進数、2進数、8進数
ASCIIは各印刷可能文字を0から127の数値にマッピングします。その数値を10進数、16進数、2進数、8進数で理解することは、開発者が思った以上に頻繁に必要とするスキルです。
ASCIIとは?
ASCIIはAmerican Standard Code for Information Interchange(情報交換用米国標準コード)の略です。1963年に公開され、128文字と0から127の整数の対応関係を定義しています。この128文字には英字(大文字・小文字)、数字0〜9、句読点、そして改行・タブ・キャリッジリターンなど33種類の制御文字が含まれます。
日本語との関連で重要な点として、ASCII範囲(0〜127)には日本語文字は含まれません。ただし、半角カタカナ(アイウエオなど)は拡張ASCIIの一種であるJIS X 0201でコード160〜223に定義されており、これがShift_JISの設計に影響を与えました。Shift_JISはASCIIと半角カタカナを組み合わせた上で日本語全角文字を扱う2バイト文字コードです。
開発者がASCIIを必要とする場面
- バイナリファイルの解読:ヘキサエディタで
0x48 0x54 0x54 0x50を見たとき、それが"HTTP"だとわかれば即座に内容を把握できます。 - ネットワークプロトコルのデバッグ:生のTCPやHTTPトラフィックはASCIIテキストです。ASCII表を知っていればパケットキャプチャが読めます。
- URLエンコード:スペースはASCII 32(
0x20)、だからURLでは%20になります。パーセント記号の後にASCIIコードの16進数値が続きます。 - エスケープシーケンス:
\nはASCII 10、\tはASCII 9、\rはASCII 13。ログファイルが崩れているとき、これらが原因であることが多いです。 - レガシーシステム:メインフレーム、組み込みファームウェア、シリアルプロトコルはASCIIを中心に設計されています。
4つの数値システム、1つの例で
文字Aは最もわかりやすい例です。4つすべてのシステムで値を覚えやすいからです。
| システム | "A"の値 | 読み方 |
|---|---|---|
| 10進数 | 65 | 基数10、普段使う数え方 |
| 16進数 | 0x41 | 基数16;4×16 + 1 = 65 |
| 2進数 | 01000001 | 基数2;メモリに実際に格納されるビット |
| 8進数 | 101 | 基数8;1×64 + 0×8 + 1 = 65 |
小文字のaは10進数97(0x61)です。大文字と小文字の差は正確に32 — スペースと同じ値です。偶然ではありません:大文字小文字変換をビット1つの操作にする意図的な設計です。
実践例
URLエンコード
ブラウザがURLをエンコードするとき、各安全でない文字のASCII値を取り、パーセント記号と2桁の16進数として書きます。スペース(ASCII 32 = 0x20)は%20になります。URLエンコーダー/デコーダーで任意のURLを即座にエンコード・デコードできます。
エスケープシーケンス
\n— ASCII 10、改行\r— ASCII 13、キャリッジリターン(Windows改行:\r\n)\t— ASCII 9、水平タブ\0— ASCII 0、null(Cでの文字列終端文字)\x41— 16進エスケープ;ASCII 65 = "A"
拡張ASCIIとUnicode
標準ASCIIは128文字をカバーします — 英語には十分ですが他の言語には不十分です。様々な「拡張ASCII」は8ビット目を使って128文字を追加しましたが、統一標準がありませんでした。コードページ437、Latin-1、Windows-1252はすべて同じバイト範囲を異なる文字に使用しました。日本では独自にShift_JISやEUC-JPが発展し、ファイルの文字化け問題を引き起こしました。
Unicodeはすべてのライティングシステムのすべてのキャラクターに固有番号を割り当てることでこれを解決しました。UTF-8はASCIIと後方互換性があり、最初の128 Unicode符号点はASCIIと同一です。
関連ツール
バイナリデータと一緒にASCIIを扱う場合は、バイナリからテキストへの変換ツールが生のバイナリ文字列を読めるテキストに変換します。数値基数の変換には数値基数コンバーターが10進数、16進数、2進数、8進数を処理します。
よくある質問
スペースのASCII値は?
スペースはASCII 32(10進数)、0x20(16進数)、00100000(2進数)です。最も低い印刷可能なASCII文字で、32未満はすべて制御文字です。
"A"が10進数65なのはなぜ?
0〜31は制御文字用に予約されており、32はスペースです。印刷可能文字は33から始まります。数字0〜9は48〜57、大文字A〜Zは65〜90、小文字a〜zは97〜122にあります。
ASCIIとUnicodeの違いは?
ASCIIは128文字を定義します。Unicodeは140,000文字以上を定義します。最初の128 Unicode符号点はASCIIと同一なので、UTF-8でエンコードされたASCIIテキストはバイト単位で普通のASCIIと同一です。
今すぐテキストをASCIIに変換
テキストを貼り付けると、各文字の10進数、16進数、2進数、8進数の値を瞬時に確認できます。