TCHAR, char, wchar_t, CString相关

先来看看MSDN怎么说吧,自己翻译的,水平不怎么好。感觉看看MSDN这些help文档比百度,谷歌的收获大,希望以后能多看MSDN,少百度谷歌。

1.string

typedef basic_string<char> string;

The type describes a specialization of template class basic_string for elements of type char.

译:这个类型为类型char类型定义了一个特定的类模板string。

 

2.wchar_t

 

The wchar_t keyword(关键字) designates(指定)a wide_character(特性) type.

译:wchar_t是一个宽的类型(汗,这翻译,自己都受不了)

 

还可以在MSDN关于wchar_t的Remarks中看到

1.wchar_t类型被MIDL定义成一个16位的无符号型的short.

2.wchar_t允许重新定义,只要和之前的定义保持一致;wchar_t可以作为const的声明.

3.在wchar_t前使用L字符或用一个string常量来指定wchar_t常量.

 

char

The char keyword specifies an-bit data item.

译:char关键字指定一个8位的数据项.

Remardk(附注)

1.默认情况下char等同于unsigned char.

 

CString

1.CString没有基类.

2.一个CString对象由可变长度的有序的字符组成;CString提供函数和运算符的语法类似于Basic.

3.CString是基于TCHAR的数据类型,如果你的程序定义为UNICODE的,那么TCHAR定义为wchar_t,wchar_t为(16位的字符类型);否则,TCHAR定义为char(8位的字符类型).在Unicode下,CString对象由16位的字符组成。不在Uniconde情况下,CString由8位长的字符组成。

 

TCHAR

如果你的程序定义为UNICODE的,那么TCHAR定义为wchar_t,wchar_t为(16位的字符类型);否则,TCHAR定义为char(8位的字符类型).在Unicode下,CString对象由16位的字符组成。不在Uniconde情况下,CString由8位长的字符组成。

 

 

 

 

总结:char为8位长的字符类型,wchar_t(宽字符)为16位长的字符类型,TCHAR及CString如上所述。

 

下面用一些代码能更好的说明问题:

1.

#include <iostream>
using namespace std;

int main(void)
{
 printf("wchar_t: %d/n", sizeof(wchar_t));
 printf("char: %d/n", sizeof(char));
 
 return 0;
}

 

输出:2

         1

 

2.

LPSTR = char *
LPCSTR = const char *
LPWSTR = wchar_t *
LPCWSTR = const wchar_t *
LPOLESTR = OLECHAR * = BSTR = LPWSTR(Win32)
LPCOLESTR = const OLECHAR * = LPCWSTR(Win32)
LPTSTR = _TCHAR *
LPCTSTR = const _TCHAR *

 

3.Unicode

一种字符编码体系,它对每个字符都用两个字节来表示,不管是否是ASCII字符。这种编码体系得到Microsoft Windows NT平台的支持,并在32位ActiveX技术中得以利用。国际标准化组织(ISO)字符标准。Uniconde使用16位(2字节)编码反感,允许65,536个不同的字符空间。Unicode包含标点符号,数学符号,修饰符号等的表示。

 

ASCII字符集

美国标准信息交换码(American Standard Code for Information Interchange) 的缩写,7位字符集,广泛用于表示标准U.S.键盘上的字母和符号。ASCII字符集与ANSI字符集的前128个字符(0到127)相同。码值从0到255,代表了字母,数字,标点符号和其他字符,ASCII码是一种标准化的编码,用以在计算机之间或计算机与外围设备之间的交换信息。

 

另附上CString转char的函数

void CString2Char(CString str, char ch[]) 

     int i; 
     char *tmpch;  
     int wLen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);//得到Char的长度 
     tmpch = new char[wLen + 1];                                             //分配变量的地址大小 
     WideCharToMultiByte(CP_ACP, 0, str, -1, tmpch, wLen, NULL, NULL);       //将CString转换成char* 
     for(i = 0; tmpch[i] != '/0'; i++) ch[i] = tmpch[i]; 

         ch[i] = '/0'; 
}

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值