2007-10-30

マルチバイト文字からワイド文字への変換

Windows Mobileでプログラムを書くときは文字列はワイド文字(UNICODE)として扱うのですが、 ライブラリ関数の多くは結果をマルチバイト文字(シングルバイト文字含む)で返してくれます。
 
文字コードを変換する方法として 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 件のコメント: