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 char
wchar_t w_charStr[1024]; //For wchar_t
Wchar2Char(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 char
wchar_t w_charStr[1024]; //For wchar_t
Char2Wchar(w_charStr, charStr);
}