1、wchar_t类型数据的初始化

在程序中,wchar_t又经常被重新定义为 TCHAR类型 或 WCHAR类型。

char类型数据的初始化就不再骜述了;只说一下wchar_t类型的初始化:

wchar_t[] = L"我是wchar_t类型的数据";    //wchar_t类型数据初始化时前面需加上宏L

2、char与wchar_t之间的转换

char与wchar_t类型数据之间的转换不能通过赋值的方式进行,只能通过 WideCharToMultiByte 和 MultiByteToWideChar 两个系统函数进行,这两个系统函数都在<windows.h>中

2.1、wchar_t转char

char * wchar2char(const wchar_t* wchar )
{char * m_char;    int len= WideCharToMultiByte( CP_ACP ,0, wchar, wcslen(wchar), NULL,0, NULL ,NULL );    m_char= new char[len+1];     WideCharToMultiByte( CP_ACP, 0, wchar, wcslen(wchar), m_char, len, NULL ,NULL );     m_char[len]= '\0';     return m_char;
}

在上面的代码中,使用起来是比较方便的,但是由于在函数体内进行new的操作,所以可能会存在内存泄漏的情况,下面用一种比较安全的方式进行转换【修改于 20210528】:

推荐:

//转换函数
int Wchar2Char(char* charStr, const wchar_t* wcharStr){   int len= WideCharToMultiByte(CP_ACP ,0, wcharStr, wcslen(wcharStr), NULL,0, NULL ,NULL );    WideCharToMultiByte(CP_ACP ,0, wcharStr, wcslen(wcharStr), charStr, len, NULL ,NULL );     charStr[len]= '\0'; return len;
}//调用方式1
void call1(const wchar_t* wcharStr){int id_len = wcslen(charStr) + 16;char* charStr= new char[id_len];Wchar2Char(charStr, w_charStr );   //use....delete []charStr;
}//调用方式2
void call2(){char charStr[1024];        //For charwchar_t w_charStr[1024];      //For wchar_tWchar2Char(charStr, w_charStr);
}

2.2、char转wchar_t

wchar_t * char2wchar(const char* cchar)
{     wchar_t *m_wchar;    int len = MultiByteToWideChar( CP_ACP, 0, cchar, strlen(cchar), NULL, 0);     m_wchar= new wchar_t[len+1];     MultiByteToWideChar( CP_ACP, 0, cchar, strlen( cchar), m_wchar, len);     m_wchar[len]= '\0' ;    return m_wchar;
} 

在上面的代码中,也是由于在函数体内进行new的操作,所以可能会存在内存泄漏的情况,下面用一种比较安全的方式进行转换【修改于 20210528】:

推荐:

int Char2Wchar(wchar_t* wcharStr, const char* charStr){int len = MultiByteToWideChar(CP_ACP, 0, charStr, strlen(charStr), NULL, 0);MultiByteToWideChar(CP_ACP, 0, charStr, strlen(charStr), wcharStr, len);     wcharStr[len]= '\0' ;    return len;
}//调用方式1
void call1(const char* charStr){int id_len = strlen(charStr) + 16;wchar_t* w_charStr = new wchar_t[id_len];Wchar2Char(charStr, w_charStr );  //use....delete []w_charStr ;
}//调用方式2
void call2(){char charStr[1024];        //For charwchar_t w_charStr[1024];      //For wchar_tChar2Wchar(w_charStr, charStr);
}

C - char与wchar_t(TCHAR/WCHAR)之间的相互转换相关推荐

  1. c语言wchar转化为char_烦人的char*,wchar_t*或者WCHAR转换

    //将char*转化为whcar_t*,其中lpwchartStr需要释放 int charTowchar_t(wchar_t** lpwchartStr,char* lpcharStr,int *l ...

  2. VC++中的char,wchar_t,TCHAR(转载)

    VC++中的char,wchar_t,TCHAR 大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱.为了统一,有必要把来龙去脉搞 ...

  3. PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下 #ifndef USE_H_ #define USE_H_ #i ...

  4. 关于Char* ,CString ,WCHAR*之间的转换问题

    GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用往往是CString,用IO流读文件数据又得到char *.得益 ...

  5. VC中char,TCHAR,WCHAR总结

    char,TCHAR,WCHAR区别 #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif t ...

  6. [转]VC中char,TCHAR,WCHAR总结

    char,TCHAR,WCHAR区别 #ifdef   UNICODE      typedef   wchar_t   TCHAR; #else      typedef   unsigned   ...

  7. char,TCHAR,WCHAR区别

    #ifdef   UNICODE                typedef   wchar_t   TCHAR; #else                typedef   unsigned   ...

  8. 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT

    char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在<string.h>里:typedef unsigned s ...

  9. 关于char, wchar_t, TCHAR, _T,L,TEXT,_TEXT,LPSTR,LPCSTR,PWSTR,PCWSTR,LPTSTR,LPCTSTR的区别

    #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif typedef unsigned cha ...

最新文章

  1. 关于C++对象模型的一点理解(2)
  2. 收不到Win10正式版预订通知?一个批处理搞定
  3. AC日记——【模板】最小费用最大流 P3381
  4. 跳槽季:跳和不跳之外的第三选择
  5. 遍历WinForm窗体 根据语言类型设置其控件Text显示
  6. opencv在android,OpenCV 在 Android 中的应用
  7. 共轭梯度法(Conjugate gradient)详解
  8. 【数字信号调制】基于matlab正交幅度调制仿真【含Matlab源码 1002期】
  9. 文件传至迅雷服务器,迅雷传输SDK开发文档
  10. sqli-labs(46-49)
  11. VirtualBox虚拟机安装
  12. com.mongodb.MongoSocketOpenException: Exception opening socket
  13. AlarmClock
  14. angular directive 入门
  15. 【福利帖】当我谈学习视觉时,我谈些什么
  16. 正态分布累积函数及其反函数 C/C++
  17. 对AWS的计费有点糊涂
  18. 一种血氧仪方案算法探讨
  19. pytesseract 安装错误总结
  20. 无公网服务器(ip)做内网穿透

热门文章

  1. HTML学习13:div和表格布局
  2. 没有期刊申请清华博士_清华大学官方:“博士生无须发表论文”理解有误!
  3. 什么是双亲委派,有什么好处?
  4. Mysql 编程实战三之计算两个日期的工作日数
  5. 算术移位 VS 逻辑移位
  6. 记一次给博友答疑(shiro相关)
  7. C++/C语言中十进制转二进制的常见方法
  8. Cadence License破解失败解决办法
  9. UE4源码阅读_骨骼模型与动画系统_动画流程
  10. Python程序设计基础案例