关于WCHAR转化为char的有关问题
关于WCHAR转化为char的问题
#include "stdafx.h"
#include <atlbase.h>
char* WSTRToAnsi(WCHAR* Msg)//把wchar*转换称char*
{
int len = wcstombs(NULL, Msg, 0);
char* buf = new char[len+1];
wcstombs(buf, Msg, len);
buf[len] = 0;
return buf;
}
int main(int argc, char* argv[])
{
WCHAR* d=L"速度";//此处如果是英文,可以成功,如果是汉字,则失败
char* s =WSTRToAnsi(d);
printf("%s\n",s);//?
return 0;
}
------解决方案--------------------
WCHAR* d=L "速度 ";
——对于这句话的处理,不同的编译器可能会不一样。
大部分编译器中,如果你的源文件不是Unicode格式的,那么d所指向的字符串并不会被自动转换成Unicode格式。
------解决方案--------------------
#include "stdafx.h"
#include <atlbase.h>
char* WSTRToAnsi(WCHAR* Msg)//把wchar*转换称char*
{
int len = wcstombs(NULL, Msg, 0);
char* buf = new char[len+1];
wcstombs(buf, Msg, len);
buf[len] = 0;
return buf;
}
int main(int argc, char* argv[])
{
WCHAR* d=L"速度";//此处如果是英文,可以成功,如果是汉字,则失败
char* s =WSTRToAnsi(d);
printf("%s\n",s);//?
return 0;
}
------解决方案--------------------
WCHAR* d=L "速度 ";
——对于这句话的处理,不同的编译器可能会不一样。
大部分编译器中,如果你的源文件不是Unicode格式的,那么d所指向的字符串并不会被自动转换成Unicode格式。
------解决方案--------------------
- C/C++ code
//#include "stdafx.h " #include "tchar.h" //#include <iostream.h> #include <LOCALE.h> #include <atlbase.h> //using namespace std; char* WSTRToAnsi(WCHAR* Msg)//把wchar*转换称char* { int len = wcstombs(NULL, Msg, 0); char* buf = new char[len+1]; wcstombs(buf, Msg, len); buf[len] = 0; return buf; } int main() { WCHAR* d=L"速度";//此处如果是英文,可以成功,如果是汉字,则失败 // cout.imbue(locale("chs"));///这样写可以 setlocale(LC_ALL,"chs");///////////////////////本地化 char* s =WSTRToAnsi(d); printf( "%s\n ",s);//? return 0; }
------解决方案--------------------
要保證源文件是 Unicode 的——不是每一個編譯器都支持的。