WCHARでは代入などの際に " " ではなく、L" " を利用していることに注意。
変数の宣言時に文字列を指定することもできる。////////////////////////////////
//初期文字列代入
//
WCHAR pszSrc[] = {L"abcdあいう"};
文字数取得にstrlen(char型専用)は利用できない。wcslenを利用する。
//////////////////////////////// //文字数取得 // size_t nLen1 = ::wcslen(pszSrc); //変数内の文字列の文字数取得 size_t nLen2 = ::wcslen(L"あいうえ"); //指定した文字列の文字数取得文字列の代入にstrlenは利用できない。wcscpyをより安全にしたwcscpy_sを利用する。
//////////////////////////////// //文字列代入 // WCHAR pszText[256]; ::wcscpy_s(pszText,256,L"あいうえABCD"); //直接代入 ::wcscpy_s(pszText,256,pszSrc); //変数から代入この変換時、プロジェクトの設定が非ユニコード(MBCSなど)になっているときは正常に変換できない可能性があるので注意。例えばWCHAR*型にハングル文字と日本語などが混在している場合が挙げられる。
//////////////////////////////// //WCHAR*からCStringへの変換 // CString strText(pszText);この場合も変換ができないことがあるので注意。
//////////////////////////////// //WCHAR*からCStringA(char型のCString)への変換 // CStringA strTextA(pszText); //コンストラクタを利用常にWCHAR*型のCStringWへの変換時はユニコード同士の変換なので文字列が正常にコピーできないことはない。
//////////////////////////////// //WCHAR*からCStringW(WCHAR型のCString)への変換 // CStringW strTextW1(pszText); //コンストラクタを利用 CStringW strTextW2 = pszText; //代入CStringAへの変換と内容は同じだが実装量が増える。この場合も変換できない可能性があるので注意が必要だ。
////////////////////////////////
//WCHAR*からchar*へ変換
//
WCHAR pszWchar[] = {L"abcdあいう"};
char* pszChar;
{
int nLen;
//charに必要な文字数の取得
nLen = ::WideCharToMultiByte(CP_THREAD_ACP,0,pszWchar,-1,NULL,0,NULL,NULL);
pszChar = new char[nLen];
if(pszChar)
{
//変換
nLen = ::WideCharToMultiByte(CP_THREAD_ACP,0,pszWchar,(int)::wcslen(pszWchar)+1,pszChar,nLen,NULL,NULL);
if(nLen == 0)
{
delete pszChar;
pszChar = NULL;
}
}
}
//
//ここでchar*型のpszCharを任意の処理で利用
//
delete pszChar; //処理が終わったらdelete
