因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串
中文名
TCHAR
出 自
微软
类 型
常规的ANSi编码
主要通过
通过define定义的字符串宏
目录
1定义
2使用原理
1定义编辑
TCHAR是通过define定义的字符串宏[1]
2使用原理编辑
微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T("")这样的字符串,对应的就有了_tcslen这样的函数
为了存储这样的通用字符,就有了TCHAR:
当没有定义_UNICODE宏时,TCHAR= char,_tcslen =strlen
当定义了_UNICODE宏时,TCHAR= wchar_t , _tcslen = wcslen[1]
当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。而未定义UNICODE宏时,TCHAR摇身一变,变成了unsignedchar。这样就可以很好的切换宽窄字符集。
tchar可用于双字节字符串,使程序可以用于中日韩等国语言文字处理、显示。使编程方法简化。
c++如何拼接两个tchar字符串?
2013-01-17 21:56 wangshinew |分类:C/C++ |浏览2048次
如: 设: TCHAR* a="我们abc"; TCHAR* b="你们bcd"; 求: TCHAR* c="我们abc你们bcd"; 最后结果必须是Tchar,而不是什么string和Cstring
分享到:
2013-01-17 22:33
提问者采纳
TCHAR* a=_T("我们abc"); TCHAR* b=_T("你们bcd"); int len_a = lstrlen(a); int len_b=lstrlen(b); TCHAR* c = new TCHAR[len_a+len_b+1]; c[0]=_T('\0'); lstrcat(c, a); lstrcat(c,b); // ... // after using c, free the memory delete []c; 当采用ANSI编译时,TCHAR就是char 当采用Unicode编译时,TCHAR就是w_char
void TcharToChar (constTCHAR * tchar, char * _char)
{
int iLength;
//获?取¨?字Á?节¨²长¡è度¨¨
iLength =WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);
//将?tchar值¦Ì赋3给?_char
WideCharToMultiByte(CP_ACP,0, tchar, -1, _char, iLength, NULL, NULL);
}
//将?TCHAR转Áa为achar //*tchar是º?TCHAR类¤¨¤型¨ª指?针?,ê?*_char是º?char类¤¨¤型¨ª指?针? TcharToChar (const TCHAR * tchar, char *_char) { int iLength ; //获?取¨?字Á?节¨²长¡è度¨¨ iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL,NULL); //将?tchar值¦Ì赋3给?_char WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, iLength, NULL,NULL); }
void CharToTchar (constchar * _char, TCHAR * tchar)
{
int iLength;
iLength = MultiByteToWideChar (CP_ACP, 0,_char, strlen (_char) + 1, NULL, 0) ;
MultiByteToWideChar (CP_ACP, 0, _char,strlen (_char) + 1, tchar, iLength) ;
}
C/C++ 连接两个字符串
一: C风格字符串连接
#include <iostream>
using namespace std;
int main()
{
}
二|:C++string类型字符串
#include <iostream>
#include <string>
using namespace std;
int main()
{
}