BorlandC++Builder/ワイド文字列の扱い

ワイド文字列では1バイト文字・2バイト文字のどちらも2バイトとして扱います。これによりメモリ効率は悪化しますが、1バイト文字と2バイト文字の境界を気にせずに済み、扱いが単純になります。

目次

AnsiStringからワイド文字列へ

STLやBoostC++ライブラリを利用する場合、AnsiStringからワイド文字列への変換が必要になります。

AnsiString src = "AnsiString文字列です";
wstring dest;

int length = src.WideCharBufSize();
if (length) {
    wchar_t *temp = new wchar_t[length];
    src.WideChar(temp, length);
    dest = temp;
    delete temp;
} else {
    dest = L"";
}

AnsiString型srcからwstring型destへ変換しています。WideCharBufSize()メソッドにて変換後に必要になるバッファサイズを取得して予め確保します。変換結果をdestへ代入します。

ワイド文字列のリテラル

ワイド文字列リテラルをソースに記述する場合、ダブルコーテーションの前にLを付けます。

wchar_t *str = L"abcあいうえお";

こうすることでマルチバイト文字列となります。ところで文字列リテラルでは

char *s1 = "abc" "def" "ghi";

このように記述することで文字列は連結されます。とても長い文字列を複数行に分割して記述することで見やすいソースを記述できます。ワイド文字列も同様ですが、注意が必要です。

wchar_t *s2 = L"abc" L"あいうえお";

このように文字列ごとに「L」を付ける必要があります。これを忘れてもエラーは出ませんが正常にワイド文字列に変換されません。


2006-12-23 komina