バイナリエディタのASCIIコードの欄を見ていて不思議に思うことがあったので、その際に調べたことについてのメモ.
ASCIIコードと拡張ASCIIコードとは
ASCIIコードは7bit(0x00~0x7F)を使って数字やアルファベットなどを表しますが、0x80~0xFFの値に対応した文字は存在しません.
ですが、英語圏以外の人間からすると、余った1bit(0x80~0xFF)も有効活用したいところです. そこでこの余った1bitに好きな文字を対応させた拡張ASCIIコードが地域ごとに誕生しました.
例えば、日本語環境のための拡張ASCIIコードは0x80~0xFFに半角カタカナを対応させています. ヨーロッパの方ではアクセント付きアルファベットなどを対応させています.
拡張ASCIIコードも広義のASCIIコードとみなすと、ASCIIコードにもいくつかの種類が存在し、0x00~0x7Fの範囲は互換性があるが、0x80~0xFFの範囲は環境によって対応する文字が異なっているといえます.
バイナリエディタを使って確かめる
環境
項目 | 内容 |
---|---|
OS | Windows11 |
バイナリエディタ | STM32 Cube Programmer 2.11.0 内のバイナリエディタ |
ASCII文字を見てみる
以下の図はSTM32マイコン用にビルドしたプログラムをフラッシュに書き込んだ後のフラッシュのダンプ結果になります. よくわからないラテン文字がASCII文字として表示されているのがわかります. 例えば、0x08000000の行を見ると 0xCD=Í、 0xD3=ÓとしてASCII文字が表示されています. しかし、ASCII文字は本来(0x00~0x7F)で定義されているため、0xCDや0xD3の値には文字が割り振られていないはずです.
このことから、このバイナリエディタはバイナリをヨーロッパ用の拡張ASCIIで表示しているようです.