wchar 和 char 的区别不是很多,wchar 是UNICODE码 char是ANSI码 UNICODE中文等都可以显示,ANSI可能会乱码
我之前对wchar_t* wszText 用strlen求字符串长度,总是有误。对宽字节,要用wcslen(wszText)*2 千万要*2 这个得到的才是刚刚好的字符串长度
自己要把wchar_t 换成char w2a资料少,不会。看到别人写的函数,摘抄下:
//-------------------------------------------------------------------------------------------------------------------
//char to wchar
WCHAR* WChar(char *string)
{
WORD *wchr;
int wsize=MultiByteToWideChar(CP_ACP, NULL, string, strlen(string), NULL, 0);
wchr=new WORD[wsize+1];
MultiByteToWideChar(CP_ACP, NULL, string, strlen(string), wchr, wsize);
wchr[wsize]=0;
return wchr;
}
//wchar to char
char* Char(WCHAR *string)
{
char *chr;
chr=new char[wcslen(string)+1];
memset(chr, 0, wcslen(string)+1);
for(unsigned int i=0; i<wcslen(string);
{
chr[i]=(unsigned char)string[i];
}
return chr;
}
至于CString 到 char* 可以用GetString到 WCHAR* 或char*
注意返回的好像是一个 const 的 ,所以最好先强制转换一下。
然后再用上面的函数。
顺便说一下,大部分函数都支持宽字节,比如ifstream 、string
用宽字节就是 wifstream、wstring
CreateWindow的宽字节就是CreateWindowW
不用宽字节就是CreateWindowA
qq 648102143
在MFC中,一般要传递WCHAR* 或 char* 的都可以传递一个CString 对象。
首先从char 和 wchar_t 之间无法强制转换。CString 的GetString 函数会返回一个LPCWSTR 或 LPCSTR, 不管是哪个,用上面的函数都可以达到目的。
//-----------------------------------------------------------------------------------------------------------------------------------------
用在自己那,有点小问题,编译不过去,自己只用wchar2char 小改,通过!
char* wCharToChar(const wchar_t* string);
char* wCharToChar(const wchar_t* string)
{
char* chr;
chr=new char[wcslen(string)+1];
memset(chr,0,wcslen(string)+1);
for(unsigned int i=0;i<wcslen(string);i++)
{
chr[i]=(unsigned char)string[i];
}
return chr;
}
没错误