人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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しても同じです。

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:Unicode
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● makeworld
●60ポイント

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;
}
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ