DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,(LPWSTR)szData,-1,NULL,0,NULL,FALSE);
char *psText;
psText = new char[dwNum];
WideCharToMultiByte (CP_OEMCP,NULL,(LPWSTR)szData,-1,psText,dwNum,NULL,FALSE);
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, strKeyName.c_str(), -1, NULL, 0);
wchar_t *pwText = new wchar_t[dwNum];
MultiByteToWideChar (CP_ACP, 0, strKeyName.c_str(), (int)strKeyName.size()+1, pwText, dwNum);
CP_OEMCP與CP_ACP有什麼區別啊
網上搜了點解釋:
CP_ACP 指示 API 使用當前設置默認的 Windows ANSI 代碼頁。CP_OEMCP 指示要使用當前設置 API 默認 OEM 代碼頁。
當將字符串轉換時,如果 Win32 ANSI api 用於從一個 Windows NT 系統中獲取文件名,請使用 CP_ACP。Windows NT 檢索從物理設備的名稱,並將 OEM 名稱轉換爲 Unicode。Unicode 名被轉換成 ANSI 如果稱爲 ANSI API,再轉換回 MultiByteToWideChar() 與 Unicode。
如果正在從 OEM 編碼的文件中檢索文件名,改用 CP_OEMCP。
但是不明白啊
WideCharToMultiByte完成後是char *psText;而MultiByteToWideChar完成後是wchar_t ;CP_ACP不是轉換成ASCI嗎,有點矛盾啊
WideCharToMultiByte的CP_ACP和CP_OEMCP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.