WideCharToMultiByte的CP_ACP和CP_OEMCP

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嗎,有點矛盾啊 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章