http://blog.csdn.net/iamoyjj/article/details/6575798
- wchar_t wstr[100]=L"wstr";
- char str[100];
- wcstombs(str,wstr,100);//宽字符转多字节
- mbstowcs(wstr,str,100);//多字节转宽字符
C2W char->wchar_t
W2C wchar_t->char
注意 codpage参数选择CP_OEMCP这样中文和英文都可以成功转换,如果只要转换英文可以使用CP_ACP
- bool C2W(const char* str,wchar_t* wstr)
- {
- int len=MultiByteToWideChar(CP_OEMCP,0,str,-1/*null terminated*/,wstr,0);
- return len==MultiByteToWideChar(CP_OEMCP,0,str,-1/*null terminated*/,wstr,len);
- }
- bool W2C(const wchar_t* wstr,char* str)
- {
- int len=WideCharToMultiByte(CP_OEMCP,0,wstr,-1/*null terminated*/,str,0,0,0);
- return len==WideCharToMultiByte(CP_OEMCP,0,wstr,-1/*null terminated*/,str,len,0,0);
- }
用例:这里要注意使用setlocale(LC_CTYPE,"chs");,使得wprintf(wstr);能正确打印汉字。
- #include <stdio.h>
- #include <locale.h>
- int main()
- {
- setlocale(LC_CTYPE,"chs");
- wchar_t wstr[256];
- C2W("abc汉字/n",wstr);
- wprintf(wstr);
- char str[256];
- W2C(L"abc汉字/n",str);
- printf(str);
- return 0;
- }