普通の文字列をLPCWSTRに変換したいです。
char dataBuff[] = abcdefghijklmnopq;
wchar_t pwsz[sizeof(dataBuff)*2];
MultiByteToWideChar(CP_ACP, 0, dataBuff, strlen(dataBuff), pwsz, sizeof(pwsz));
LPCWSTR Data = pwsz;
cout << Data << endl;
MultiByteToWideChar関数を利用し、変換できますが、
変換した結果を検証する仕方がわかりません。
dataBuff[] = aの場合
cout << Data << endlの結果が0012FF050
dataBuff[] = bの場合でも
cout << Data << endlの結果が0012FF050
になっています。
正しいですか?
> wchar_t pwsz[sizeof(dataBuff)*2];
sizeof( wchar_t ) = sizeof( char ) * 2 なので
dataBuff と同じ文字数のバッファを確保するのであれば
wchar_t pwsz[ sizeof( dataBuff ) ];
で構いません。
[] の中は配列の要素数であり、確保するバイト数ではありません。
> dataBuff[] = aの場合
> cout << Data << endlの結果が0012FF050
> dataBuff[] = bの場合でも
> cout << Data << endlの結果が0012FF050
> になっています。
これでは、dataBuff のアドレスを表示しているだけで、その中身まで見ていないので
正しいかどうかわかりません。
> 変換した結果を検証する仕方がわかりません
MultiByteToWideChar の戻り値が信用できませんか?
> MultiByteToWideChar関数を利用し、変換できますが、
> 変換した結果を検証する仕方がわかりません。
#include <iostream>
#include <locale>
...
std::locale::global(std::locale(japanese));
std::wcout << Data << std::endl;
つまりこーゆーこと。
#include <windows.h>
#include <iostream>
#include <locale>
int main() {
std::locale::global(std::locale(japanese));
char dataBuff[] = alphabet0123カタカナひらがな漢字;
wchar_t pwsz[sizeof(dataBuff)*2];
MultiByteToWideChar(CP_ACP, 0, dataBuff, strlen(dataBuff), pwsz, sizeof
(pwsz));
LPCWSTR Data = pwsz;
std::wcout << Data << std::endl;
return 0;
}
ちゃんと動いてます。
επιστημη さんの方法で、うまくできました。
ありがとうございました。
ちなみに、mbstowcsという関数もあって、これを使っても同じですよね。
> mbstowcsという関数もあって、これを使っても同じですよね。
やってみて同じなら同じでしょうね。