SDK编程笔记-UNICODE篇
[简单基础但重要]
Petzold的Programming Windows的第2章非常详细的讲解了关于Unicode的方方面面。我们需要知道的是它给C语言和Windows编程带来的变化。
·C语言相关
对应于char, C语言中也有宽字符内型wchar_t。wchar_t被定义为: typedef unsigned short wchar_t ;显然它是16位的。wchar_t类型的常字串应该这样写: L"hello" 。因此可以这样定义一个宽字符指针 wchar_t *pwc=L"hello";。
对于字符串函数, C语言中也有两个版本。如对应于strlen有wcslen,wprintf是printf的宽字符版。当然这两个版本的函数使用各自类型的参数,原因是显然的,char和unsigned short 怎么能等同呢?编译器是不会放过你的。
下表是对char,wchar_t相关内容的比较:
(测试环境:VC++6.0) | char类型 | wchar_t类型 |
类型大小(32位系统) | 8位 | 16位 |
常量字符表示法 | ´A´ | L´A´ 或 ´A´ |
常量字符串表示法 | ´hello´ | L´hello´ |
一些使用方法 | char c=´A´; (c的值:0x41) | wchar_t wc=´A´; (wc的值:0x0041) |
char* p=´hello´; | wchar_t* pw=L"hello"; | |
sizeof | sizeof("hello")=6 | sizeof(L"hello")=12 |
计算长度 | strlen("hello")=5 | wcslen(L"hello)=5 |