ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

CString等でUnicodeとマルチバイトを相互に変換する

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 の文字列変換マクロにある。

#includeは<atlbase.h>と<atlconv.h>。MFCプロジェクトの場合はおそらくinclude不要。