int nLen = wcslen(pTchar) + 1;
pChar = new char[nLen * 2];
WideCharToMultiByte(CP_ACP, 0, pTchar, nLen, pChar, 2 * nLen, NULL, NULL);
#else
int nLen = strlen(pTchar) + 1;
pChar = new char[nLen];
memcpy(pChar, pTchar, nLen*sizeof(char));
#endif
return pChar;
// 使用:
char *p = TCHARToChar(pTchar);
// ...
delete [] p;
p = NULL ;
char * 转为 TCHAR *
TCHAR* CharToTCHAR(const char* pChar)
TCHAR *pTchar = NULL;
int nLen = strlen(pChar) + 1;
#ifdef _UNICODE
pTchar = new wchar_t[nLen];
MultiByteToWideChar(CP_ACP, 0, pChar, nLen, pTchar , nLen);
#else
pTchar = new char[nLen];
wcsncp(pTChar, pChar , nLen*sizeof(char));
#endif
return pTchar ;
使用方式同上
转码(常用类型和字符转换)转码(常用类型和字符转换)TCHAR * 转为char * char* TCHARToChar(const TCHAR* pTchar){ char* pChar = NULL;#ifdef _UNICODE int nLen = wcslen(pTchar) + 1; pChar = new char[nLen * 2]; ...
char :单字节变量类型,最多表示256个字符,
wchar_t :宽字节变量类型,用于表示Unicode字符,
它实际定义在<string.h>里:typedef unsigned short wchar_t。
为了让编译器识别Unicode字符串,必须以在前面加一个“L”,定义宽字节类型方法如下:
wchar_t c = `A' ; wchar_t * p = L...
//将TCHAR转为char
//*tchar是TCHAR类型指针,*_char是char类型指针
TcharToChar (const TCHAR * tchar, char * _char)
int iLength ;
因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串。
微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数
char:计算机编程语言(c、c++、java、VFP等)中可容纳单个字符的一种基本数据类型。
TCHAR:为了满足Unicode编码,对char的扩展,即_T(“str”)表示TCHAR类型
C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串字符串处理函数,比如:strlen和
C++编程中屡屡要遇到宽窄字符转换的问题,尤其是字符串中有中文,稍有不慎就会中文乱码,程序运行出错。
下面为
char*、
char[]与T
CHAR*、T
CHAR[]互转的用法,不求花哨,只求好用!请参考~
char转T
CHAR
char转T
CHAR
Win32中CStdString 是需要TCHAR类型的值才可以赋值的,而很多文件读取时FILE的fopen函数之类的需要的是CHAR,我们需要把它们互转,这里我在网上找到了一个比较方便的方法
没有定义UNICODE,所以它里面的字符串就是简单用" "就行了,创建工程的时候包含了UNICODE定义,就必须对TCHAR和char进行转换。
首先是把TCHAR转为char