多字节→宽字节使用MultiByteToWideChar();
宽字节→多字节使用WideCharToMultiByte()。
函数原型即参数如下:
// 返回目的字符串的长度
int MultiByteToWideChar(
UINT CodePage, // CP_CAP实现了ANSI与Unicode之间的转换;CP_UTF8实现UTF-8与Unicode之间的转换
DWORD dwFlags, // 一般为0
LPCTSTR lpMultiByteStr, // 要转换的多字节字符
int cchMultiByte, // 多字节字符的长度,-1时表示自己计算长度
LPWSTR lpWideCharStr, // 目的字符串,宽字节字符串
int cchWideChar // 目的字符串长度,宽字节字符串的长度
);
// 返回目的字符串的长度
int WideCharToMultiByte(
UINT codePage, // CP_CAP实现了ANSI与Unicode之间的转换;CP_UTF8实现UTF-8与Unicode之间的转换
DWORD dwFlags, // 一般为0
LPWSTR lpWideChar, // 要转换的宽字节字符串
int cchWideChar, // 宽字节字符串的字符个数
LPCSTR lpMultiByte, // 目的字符串,多字节字符串
int cchMultiByte, // 目的字符串中的字符个数
LPCSTR lpDefaultChar, // 遇到不能转换的宽字符时,函数使用该参数指向的字符
PBOOL pfUsedDefaultChar // 只烧有一个字符不能转换为多字节形式时,该值=TRUE
);
使用示例:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
int k; // 字符个数
// 多字节转换为宽字节
char chTmp[] = "helloWorld";
wchar_t* chWideTmp;
k = MultiByteToWideChar(CP_ACP, 0, chTmp, -1, NULL, 0); // 获取转换后的宽字节的字符个数
chWideTmp = new wchar_t[k * sizeof(wchar_t)];
MultiByteToWideChar(CP_ACP, 0, chTmp, -1, chWideTmp, k);
MessageBox(NULL, chWideTmp, L"MultiByteToWideChar", MB_OK);
// 宽字节转换为多字节字符串
TCHAR tchTmp[] = L"HelloWorld";
char* cchTmp;
TCHAR tchTmp1[30];
k = WideCharToMultiByte(CP_ACP, 0, tchTmp, -1, NULL, 0, NULL, NULL);
cchTmp = new char[k * sizeof(char)];
WideCharToMultiByte(CP_ACP, 0, tchTmp, -1, cchTmp, k, NULL, NULL);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46211.html