宽字符wchar_t* 和字符char*的介绍和转换

问题:

         一次偶然的碰到了,宽字符和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 *的具体的差异,所以难免有错误,以上只是我遇到的问题的两个解决方案,希望能对看的人有帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值