第二章 字符和字符串处理
作者极力推荐在应用程序中使用Unicode字符串,并通过新的安全字符串函数来处理它们,参见P25“为何要用Unicode”。
utf-8字符串下一个字符会被编码为1个字节、2个字节、3个字节或者4个字节。
编译器内建的unicode数据类型是:wchar_t。
字符或者字符串之前加上L来告知编译器使用的是unicode类型。
windows中的unicode函数和ansi函数:
通常dll中提供两个函数:一个ansi版本的和一个unicode版本的。在ansi版本中,只是分配内存,执行必要的字符串转换,然后调用该函数对应的unicode版本。
例如:CreateWindowExA和CreateWindowExW。
C运行库中的unicode函数和ansi函数:
和“windows中的unicode函数和ansi函数”不同的是“C运行库中的unicode函数和ansi函数”互相独立不再互相调用,函数的使用取决于编译器选项是否使用了_UNICODE宏。
例如:
#ifdef _UNICODE
#define _tcslen wcslen
#else
#define _tcslen strlen
#endif
C运行库中的安全字符串函数:
在StrSafe.h中定义了新的安全字符串函数,针对现有的函数例如_tcscpy后面加上_s表示安全的意思。
计算缓冲区的字符数的时候可以使用宏_countof,之前更多的会使用sizeof(szBuff)/sizeof(TCHAR)。
StringCchCat、StringCchCatEx、StringCchCopy、StringCchCopyEx、StringCchPrint、StringCchPrintEx……中的Cch表示Count of characters,即字符数,通常用_countof来获得。
对应的是Cb,表示Count of bytes即字节数,通常用sizeof来获得。
Windows字符串函数:
ShlwApi.h中定义了大量方便好用的字符串函数,例如格式化操作可以使用:StrFormatKBSize和StrFomatByteSize;排序可以使用CompareString(Ex)和CompareStringOrdinal。
unicode与ansi字符串的转换:
MultiByteToWideChar、WideCharToMultiByte参见P30的示例。
判断文本是ansi还是unicode:
可以使用WinBase.h中声明的IsTextUnicode函数。
浙公网安备 33010602011771号