文字コードを変換する方法として MultiByteToWideChar関数が用意されています。
if (ndisSsid.SsidLength > 0) { iLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCSTR)ndisSsid.Ssid, -1, NULL, 0); if (iLen > 0) { MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCSTR)ndisSsid.Ssid, -1, strSsid.GetBuffer(iLen), iLen); strSsid.ReleaseBuffer(); } } else { strSsid.Empty(); }
1回目の呼び出しで必要なサイズを求めて、2回目の呼び出しでATL::CStringで必要な領域を確保しつつ 文字コードの変換を行っています。
今日はじめて知ったのですが、この他にも mbtowcという関数がありました。
mbstowcs(pLvdi->item.pszText, (const char *)(pNdisBssid->Ssid.Ssid), pNdisBssid->Ssid.SsidLength);
この例では pLvdi->item.pszTextはにあらかじめ必要なサイズが確保されている前提があるので前者とはちょっと状況が違いますが、 場合によってはすっきりと書けるのではないでしょうか。
ただ、ライブラリ関数が素直に UNICODEを返してくれるのが一番ですよね。
0 件のコメント:
コメントを投稿