问题:
一次偶然的碰到了,宽字符和char *的转换,就研究了下,下面把我通过这次查找的东西总结一下。
回答:
宽字符的定义:(不一定正确呀!)UNICODE字符集称为宽字符,16位,C语言用unsigned short表示,可以存放世界上所有语言所有文字。在Vc6.0中可以用wchar_t来描述。
下面在介绍char*转换为wchar_t *的方法:
方法一:标准C++库函数,再用之前需要引入头文件#include<locale.h> ,同时由于宽字符的输出比较特殊,所以要设置输出环境: setlocale(LC_ALL, ""); 相应的一个例子是:
#include<locale.h>
#include<stdlib.h>
#include<stdio.h>
int main(int argc, char* argv[])
{
char * a = "你好";
wchar_t b[10] = {0};
setlocale(LC_ALL, "");
mbstowcs(b, a, 10);
printf( "%ls/n", b);
return 0;
}
第二种方法是:应用Windows的Api,MultiByteToWideChar()这个函数,应用这个函数要注意引入Windows的头文件 即:#include<windows.h>相应的一个转化例子为:
#include<windows.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char *ss="sdfadsfas";
cout<<ss<<endl;
int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, ss, -1, NULL, 0 );
if (nLen == 0)
{
return NULL;
}
//声明一个宽字符
wchar_t* pResult = new wchar_t[nLen];
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, ss, -1, pResult, nLen );
std::wcout<<pResult<<endl;
return 0;
}
在这个例子中,如果仔细看到我并没有设定宽字符的输出格式,而是用了另一个输出
wcout<<这个是同样也可以正确输出宽字符。
小结:由于水平有限,我并没有研究怎么把宽字符转化为char *,而且我本人也不是很明白宽字符和char *的具体的差异,所以难免有错误,以上只是我遇到的问题的两个解决方案,希望能对看的人有帮助!