CString等でUnicodeとマルチバイトを相互に変換する方法のメモ。こんな便利なマクロ(実態はクラス)があったとは。例えば、UnicodeからANSI(マルチバイト)に変換する場合はCW2A(string)でOK。逆に、ANSIからUnicodeならCA2W(string)。マクロの返り値が変換後の文字列となっているので、関数の引数を変換する場合に便利。
例:
Example of converting from Unicode to ANSI
このマクロの命名規則は以下の通り。
C SourceType 2[C]DestinationType[EX]
SourceType, DestinationTypeにはA, W, T, OLEのいずれかが入る。OLEはWと同等。DesitinationTypeの前にCを入れるとConst扱い。末尾にEXをつけると、変換バッファのサイズをテンプレートとして渡せる。
例えば、SourceTypeがANSI、DestinationTypeがUnicodeなら、CA2Wとなる。なお、CA2CW等の一部の組み合わせは実装されていない模様。公式な詳細はATL と MFC の文字列変換マクロにある。