zoukankan      html  css  js  c++  java
  • CString类型转char类型出现中文乱码问题

      一般来说CString类型的变量具有很强的操作性,但有时为了使用某些c函数,必须将CString类型的变量转换为char数组类型。关于CString转char的方法,网上查了查,发现大都没介绍清楚,这里写出来做个小结,加深下印象。

      为完成他们之间的转换,首先得说明一下他们所占的内存大小。CString属于所谓的宽字符集,占一个字符占两个字节; char类型属于窄字符集,一个char字符占一个字节。故他们之间的转换涉及到字节大小的转换。另一方面MFC中Ctring,默认采用unicode编码,而char采用ansi编码,两种编码中单个字符占的存储大小也是不同的。

      将CString转char,会用到一个函数 WideCharToMultiByte, 其实unicode与utf-8的互转,unicode与ansi的互转,均可以利用此函数完成,该函数的原型为

        int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr,int cchMultiByte, LPCSTR lpDefaultStr, LPBOOL lpUsedDefaultChar);

    该函数的参数介绍就不说了,多看几次就记住了。CString变量中有中文等多字节字符,就要注意CodePage的类型,如果要写出到文件,还要注意转换的编码和文件的编码一致,不然打开仍然乱码。下面贴出简短代码

    View Code
    1 CString tmp(_T("程序猿"));        // 待转换CString变量
    2 wchar_t *ptr;             
    3 char buf[16];        // 目标存储空间
    4 
    5 ptr=tmp.GetBuffer(tmp.GetLength()*sizeof(wchar_t));
    6 WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)ptr, -1, buf, sizeof(buf), NULL, NULL);
  • 相关阅读:
    [java,2019-01-28] 枪手博弈,谁才是最后赢家
    [java,2019-01-25] 图片和二进制互转
    [java,2019-01-15] word转pdf
    [python,2018-06-29] 37%法则及其拓展解决恋爱问题
    [java,2018-06-26] 扑克牌抽牌求和问题
    [python,2018-06-25] 高德纳箭号表示法
    [java,2017-06-12] myEclipse双击无法打开文件
    OpenGL核心技术之法线贴图
    游戏中水的渲染技术系列一
    Unity 3D实现帧同步技术
  • 原文地址:https://www.cnblogs.com/HackingProgramer/p/3067671.html
Copyright © 2011-2022 走看看