C - char与wchar_t(TCHAR/WCHAR)之间的相互转换
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)之间的相互转换相关推荐
- c语言wchar转化为char_烦人的char*,wchar_t*或者WCHAR转换
//将char*转化为whcar_t*,其中lpwchartStr需要释放 int charTowchar_t(wchar_t** lpwchartStr,char* lpcharStr,int *l ...
- VC++中的char,wchar_t,TCHAR(转载)
VC++中的char,wchar_t,TCHAR 大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱.为了统一,有必要把来龙去脉搞 ...
- PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换
本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下 #ifndef USE_H_ #define USE_H_ #i ...
- 关于Char* ,CString ,WCHAR*之间的转换问题
GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用往往是CString,用IO流读文件数据又得到char *.得益 ...
- VC中char,TCHAR,WCHAR总结
char,TCHAR,WCHAR区别 #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif t ...
- [转]VC中char,TCHAR,WCHAR总结
char,TCHAR,WCHAR区别 #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned ...
- char,TCHAR,WCHAR区别
#ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned ...
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT
char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在<string.h>里:typedef unsigned s ...
- 关于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 ...
最新文章
- 关于C++对象模型的一点理解(2)
- 收不到Win10正式版预订通知?一个批处理搞定
- AC日记——【模板】最小费用最大流 P3381
- 跳槽季:跳和不跳之外的第三选择
- 遍历WinForm窗体 根据语言类型设置其控件Text显示
- opencv在android,OpenCV 在 Android 中的应用
- 共轭梯度法(Conjugate gradient)详解
- 【数字信号调制】基于matlab正交幅度调制仿真【含Matlab源码 1002期】
- 文件传至迅雷服务器,迅雷传输SDK开发文档
- sqli-labs(46-49)
- VirtualBox虚拟机安装
- com.mongodb.MongoSocketOpenException: Exception opening socket
- AlarmClock
- angular directive 入门
- 【福利帖】当我谈学习视觉时,我谈些什么
- 正态分布累积函数及其反函数 C/C++
- 对AWS的计费有点糊涂
- 一种血氧仪方案算法探讨
- pytesseract 安装错误总结
- 无公网服务器(ip)做内网穿透