最近会社で聞かれて答えたことをまとめてみました。
事の発端は、ある16進ダンプを見ていたときのことです。もしかするとURLエンコードされた文字列だったかもしれません。
あー、16進数で0x25だから(キーボード見ながら)"%"だなとか話していると、なぜキーボードを見ているのかと聞かれました。
キーボードのどこを見ていたか
見ていたのは、106/109キーボードの数字キー"5"の上部に書かれている"%"という文字です。
実は106/109キーボードの数字キー"1"~"9"に書かれている記号は、ASCIIコードの"0x21"~"0x29"と一致します。キーボードはWikipediaのものを見てみることにしましょう。文字コード表はQiitaの他の方の記事を見てみることにしましょう。どちらも !"#$%&'() の順に並んでいることが分かります。
キーボードの"5"に書かれている記号"%"を見て、"16進数で0x25だから%"と話していたのでした。
たまたまこのような配置になったとは考えにくいです。そのため、意図的にこのような配置にしているのだと思います。しかし、このような配置にした経緯は、ネット上を探しても見つけられませんでした。
残念ながら、続く文字 *+,-./ ( 0x2A ~ 0x2F ) の変換を行うお手軽な方法はなさそうです。また、101/104キーボードにはこの種の裏技はなさそうです。
他にASCIIコードまわりのお手軽な変換は
存じ上げません。とはいっても、以下のようなことくらいは覚えておくほうがよいと思います。
- 制御文字が 0x00 ~ 0x1f に集まっています。制御文字の中でも、よく使うものは覚えておくほうがよいでしょう。CR/LF/TABあたりはよく使う人が多いと思います。
- スペースは 0x20 です。
- 今回ターゲットとなった記号の範囲 0x21 ~ 0x29 は、106/109キーボードさえあれば変換できます。
- 数字 0x30 ~0x39 には "0"~"9"が連続的に割り付けられています。
- アルファベット大文字 0x41 ~ 0x5A と アルファベット小文字 0x61 ~ 0x7A には "A"~"Z"が連続的に割り付けられている。
派生知識
CR+LFで改行されたテキストをviで開いて、行末に表示される^Mを見たことのある人がいるかもしれません。"CR=^M" → "Mは13番目のアルファベット" → "CRは文字コード13" という結びつきができると、文字コードを覚えやすくなるかもしれません。
特別な設定をしていないと、Unix系OSのシェルから Ctrl-D の操作でログアウトします。"EOT(0x04)=^D"も同様の関係です。また、"LF(0x0a)=^J" や "TAB(0x08)=^I" も同様の関係です。
これらのことが分かると、制御文字 0x00 ~ 0x1f の一部の文字コードを覚えやすくなると思います。