16進っぽいメモ

rich8502005-09-09

昔々、某MMOで「バトルアックス」という武器が「バトルヂッハベ」と表記されていた時代がありました。また、プログラムを書く際に、適当な絶対パスなんかを全部大文字にしようとして、「デスクトップ」という文字が「デベハトップ」に化けてしまうという現象が起こることがあります。
何でこんなことになるかというと、文字列中のバイトを走査して行ったときに1バイトずつ見ていってしまうと、本来は2バイト文字の一部であるところが変換されてしまうためです。具体的な例を挙げます。

83 6F 83 67 83 8B 83 41 83 62 83 4E 83 58  バトルアックス
00 6F 00 67 00 8B 00 41 00 62 00 4E 00 58  .o.g...A.b.N.X
00 6F 00 67 00 8B 00 61 00 62 00 6E 00 78  .o.g...a.b.n.x
83 6F 83 67 83 8B 83 61 83 62 83 6E 83 78  バトルヂッハベ
83 66 83 58 83 4E 83 67 83 62 83 76  デスクトップ
00 66 00 58 00 4E 00 67 00 62 00 76  .f.X.N.g.b.v
00 66 00 78 00 6E 00 67 00 62 00 76  .f.x.n.g.b.v
83 66 83 78 83 6E 83 67 83 62 83 76  デベハトップ

とまぁこういうわけです。そんなときはマルチバイト対応の大文字変換関数「_mbsupr」です。以下略。