WideCharToMultiByteの使い方について教えてください。以下の行でlpStringに"90"のunicodeを代入して変換するとAとなります。Aは以下でセットしたもので変換できなかったときに表示するようにセットしてます。AをNULLにすると??となります。


int y=WideCharToMultiByte(CP_ACP,0,lpString,wcslen(lpString),NULL,0,NULL,NULL);
x=WideCharToMultiByte(CP_ACP,0,lpString,wcslen(lpString),shmem,y+1,'A',NULL);

どうしてでしょうか?また、wcslen(lpString)をwcslen(lpString)+1しても同じです。

回答の条件
  • 1人2回まで
  • 登録:2009/10/08 19:31:22
  • 終了:2009/10/15 19:35:03

回答(1件)

id:makeworld No.1

makeworld回答回数75ベストアンサー獲得回数232009/10/08 20:34:23

ポイント60pt

lpStringが、Shift-JISに変換できない文字列を参照しているのではないでしょうか?

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned char buff[512];
	LPCWSTR lpString;
	LPSTR lpMBString = (LPSTR)buff;
	int x, y;

	lpString = L"abc";
	y = WideCharToMultiByte(CP_ACP, 0, lpString, wcslen(lpString) + 1, NULL, 0, NULL, NULL);
	x = WideCharToMultiByte(CP_ACP, 0, lpString, wcslen(lpString) + 1, lpMBString, y, "A", NULL);
	puts(lpMBString);	/* "abc"と表示 */

	lpString = L"日本語";
	y = WideCharToMultiByte(CP_ACP, 0, lpString, wcslen(lpString) + 1, NULL, 0, NULL, NULL);
	x = WideCharToMultiByte(CP_ACP, 0, lpString, wcslen(lpString) + 1, lpMBString, y, "A", NULL);
	puts(lpMBString);	/* "日本語"と表示 */

	lpString = L"♥♥♥";
	y = WideCharToMultiByte(CP_ACP, 0, lpString, wcslen(lpString) + 1, NULL, 0, NULL, NULL);
	x = WideCharToMultiByte(CP_ACP, 0, lpString, wcslen(lpString) + 1, lpMBString, y, "A", NULL);
	puts(lpMBString);	/* "AAA"と表示 */

	return 0;
}
  • id:makeworld
    すみません。質問文を見落としてました。
    lpString = (LPCTSTR)"90";ではなく
    lpString = (LPCTSTR)L"90";と記述すれば、正しく動作すると思います。
    (文字列定数はLを付けないと、UNICODEとして扱われません)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません