之前转过一篇文章,讲述了C++字符中多种类型的来源去脉,对字符处理有了一定的了解,但只是业余用C++,不常用,记不大牢,所以今天抽空再整理了一遍,列了一张相关的表格。由于这里对表格排版比较困难,所以做成了图片。
之前转的文章:http://blog.csdn.net/mostone/article/details/7397336
备注中的地址:http://blog.donews.com/holen/archive/2004/11/30/188182.aspx
由于历史的原因,造成这么多的字符类型定义,给初学者带来了不少的困惑,常常不知道要用什么。
从上表可以清晰的看到,用预定义的宏,可以省去不少麻烦,如果统一使用这种方式,只要改变预定义符,可以方便地在 DBCS 和 Unicode 之间进行转换。
虽然说,现在基本上是 unicode 的天下了,很少再使用 DBCS,但使用预定义的宏,有些 API 使用就不用指定 A/W 的后缀,会更方便直观。
再说一下类型缩写的含义,以便记忆:
TCHAR | Text Char |
LPSTR | Long Point to String |
LPCWSTR | Long Point to Constant Wide String |
中文名称 | 别称 | 英文名称 | 缩写 | 字符集例 | 长度 | 类型定义符 | 常量前缀 | 例 | 相关函数例 | 备注 |
单字节字符集 | Single-byte character set | SBCS | ASCII | 1 byte | char LPSTR LPCSTR | char x = 'a' | strcpy() sprintf() printf() | |||
多字节字符集 | Multi-byte character set | MBCS | GBK BIG5 Shift-JIS | 1-2 bytes | _mbscpy() sprintf() printf() | |||||
统一码 万国码 单一码 标准万国码 | Wide Char宽字符 | unicode | UTF-16/UCS-2 | 2 byte | wchar_t/WCHAR LPWSTR LPCWSTR | L | wchar_t x = L'a' | wcscpy() swprintf() wprintf() | UTF = Unicode/UCS Transformation Format UCS = Universal Character Set Unicode 的概念对我来说有点乱,这里涉及到两个标准制定组织,大家可以参考下面网页扩展阅读:http://blog.donews.com/holen/archive/2004/11/30/188182.aspx | |
<预定义选择> | _unicode defined | TCHAR LPTSTR LPCTSTR | _T()/TEXT() | TCHAR x = _T('a') | _tcscpy() _stprintf() _tprintf() | 根据预定义符,在编译时确定实际类型,例: If UNICODE TCHAR = wchar_t Else TCHAR = char End if | ||||
其它 | ||||||||||
单字节字符 | Single-byte characters | CBCS | ASCII | 1 byte | ||||||
双字节字符 | Double-byte characters | DBCS | GBK BIG5 Shift-JIS | 1-2 bytes |