我的博客小站

第二章 字符和字符串处理

作者极力推荐在应用程序中使用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函数。

posted on 2011-09-19 16:23  BIGSING  阅读(219)  评论(0)    收藏  举报

导航

我的博客小站