AECHAR の入力

今のライブラリは文字列クラスなんてのは作ってないのだけれども、今のプロジェクトは幸いにして使う文字列が固定なので、事前にテクスチャにして(文字列をテクスチャ化する)おくことで何とかなってる。
でも、やっぱりその固定の文字列を作るために AECHAR の文字を書く必要があるのだけれども、AECHAR は char を敷衍しただけなので L"ほげ" と書くわけにはいかない。
ということでこんな風に書いてる。

void foo(const AECHAR* str);

foo(reinterpret_cast<const AECHAR*>("ほげ\0"));
foo(reinterpret_cast<const AECHAR*>("h\0o\0g\0e\0\0")); // hoge

char の文字列を書く際に 1 バイトの char の文字を敷衍して、\0 + char の文字終端によって AECHAR の NULL 終端ができるようにしてる。
まあこれは多分基本(?)なんだろうけど、最近はまったこと。

foo(reinterpret_cast<const AECHAR*>("1\05\0\0")); // 15...?

15 と書きたかったんだけど、これだと期待通りの文字がでてこない。
バイナリデータを除いてみると、

31 05 00 00 00 // 31 は '1' の文字コード

となってる。本来なら

31 00 35 00 00 00 // 35 は '5' の文字コード

となってるべきなのに。


まあ要するに \05 が 8 進数と解釈されちゃっただけなんだけど、そもそも 8 進数入力できることすら知らなかったYO!
\nnn が 8 進数の入力みたいなので、こうやって直しますた。

foo(reinterpret_cast<const AECHAR*>("1\0005\0\0")); // 15


……スーパーpre記法賢すぎ。エスケープ正しく認識してるし。