(转)char,wchar_t,TCHAR 3者的区别与联系

2. UNICODE WCHAR*到 char *
CString str(wchar*);
///
LPCSTR       32-bit   指针,指向一个常量字串  
LPSTR        32-bit   指针,指向一个字串  
LPCTSTR      32-bit   指针,指向一个常量字串。此字串可移植到Unicode   和DBCS  
LPTSTR       32-bit   指针,指向一个字串。此字串可移植到Unicode   和DBCS
LPWSTR       32-bit   指针,指向一个unicode字符串的指针  
LPCWSTR      32-bit   指针, 指向一个unicode字符串常量的指针  
前面的L代表LONG,P就是指针的意思,C就是constant的意思, W是wide的意思,STR就是string的意思
///
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 *
///

常用函数的char版本和wchar_t版本
size_t strlen( const char *string );
size_t wcslen( const wchar_t *string );

char *strcpy( char *strDestination, const char *strSource );
wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );

char *strcat( char *strDestination, const char *strSource );
wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );

int strcmp( const char *string1, const char *string2 );
int wcscmp( const wchar_t *string1, const wchar_t *string2 );


-----------------------------------------
字符串声明类型。一般使用通用即可,让程序自动根据所设的编码进行设定。

 


通用 MFC 数据类型映射到 ASCII映射到 UNICODE注释
_TCHARcharwchar_t _TCHAR 是一个映射宏,当定义 UNICODE 时,该数据类型映射到 wchar_t,如果没有定义 UNICODE,那么它映射到 char。
_T 或 _TEXTchar 常量字符串wchar_t 常量字符串功能与宏相同,在 ASCII 模式下,它们被忽略,也就是说被预处理器删除掉,但是如果定义了UNICODE, 则它们会将常量字符串转换成等价的 UNICODE 。
LPTSTRchar*, LPSTR(Win32)wchar_t * 可移植的32位字符串指针。它将字符类型映射到工程设置的类型。
 LPCTSTR const char*, LPCSTR(Win32) const char*, LPCSTR(Win32) 可移植的32位常量字符串指针。它将字符类型常量映射到工程设置的类型。

 
 

2. UNICODE WCHAR*到 char *
CString str(wchar*);
///
LPCSTR       32-bit   指针,指向一个常量字串  
LPSTR        32-bit   指针,指向一个字串  
LPCTSTR      32-bit   指针,指向一个常量字串。此字串可移植到Unicode   和DBCS  
LPTSTR       32-bit   指针,指向一个字串。此字串可移植到Unicode   和DBCS
LPWSTR       32-bit   指针,指向一个unicode字符串的指针  
LPCWSTR      32-bit   指针, 指向一个unicode字符串常量的指针  
前面的L代表LONG,P就是指针的意思,C就是constant的意思, W是wide的意思,STR就是string的意思

 

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

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

ANSI 字符集
Microsoft Windows 使用的美国国家标准研究所 (ANSI) 8 位字符集,它最多可以表示键盘的256 个字符。前 128 个字符表示标准美国键盘上的字母和符号。后 128 个字符表示特殊字符,如国际字母表中的字母,重音符号,货币符号和分数符号等。

unicode和ansi都是字符代码的一种表示形式。

为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

  不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

  不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lhsxsh/archive/2009/05/29/4224043.aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值