MFC Cstring转char *



UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家

分享。
 

先总结一下网上找到的三种转换的方法:

方法一:使用函数setlocale

    setlocale(LC_ALL,"chs");

    需要包含头文件#include<locale.h>

    此方法的思路是配置地域化信息。通常在需要输入输出中文的时候设置一下,就没问题了,setlocale详情点我

方法二:使用函数:T2A、W2A

            CString str = _T("D://校内项目//QQ.bmp");

             //声明标识符
             USES_CONVERSION;

            //调用函数,T2A和W2A均支持ATL和MFC中的字符转换
             char* pFileName =T2A(str);  
            //char * pFileName = W2A(str); //也可实现转换

           注意:有时候可能还需要添加引用#include  <afxpriv.h>

    使用此方法要注意声明标识符,T2A、W2A详情  点我

方法三:使用API:WideCharToMultiByte进行转换

             CString str = _T("D://校内项目//QQ.bmp");

           //注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
             int n =str.GetLength();    // n = 14, len = 18

            //获取宽字节字符的大小,大小是按字节计算的
             intlen =WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);

            //为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
           char * pFileName = newchar[len+1];  //以字节为单位

           //宽字节编码转换成多字节编码
            WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),pFileName,len,NULL,NULL);

           WideCharToMultiByte(CP_ACP,0,str,str.GetLength() + 1 ,pFileName,len+ 1 ,NULL,NULL);

           pFileName[len+1]= '/0';  //多字节字符以'/0'结束

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值