《Windows核心编程》读书心得——字符和字符串处理(1)

l  ANSIUNICODE编码:

ANSI编码中,1个字符可能占一个字节、两个字节甚至多个字节,且不同国家的文字有不同的规定,存在字符库的冲突。

UNICODE编码(包括UTF-8UTF-16UTF-32,最常用的是UTF-16),以UTF-16为例,每个字符占用固定大小的字节数(2个字节),当然,少数无法用2字节表示的字符除外(这些字符可用代理,4字节表示)。UNICODE编码中,不同国家的文字分在不同的码段,不存在字符库的冲突,更有利于计算机的全球化需要。因此,微软提倡使用UNICODE编码,在WINDOWS NT以后的操作系统中,都是以UNICODE编码的。

建议:我们自己写在WINDOWS下运行的程序,最好也使用UNICODE编码,因为这样更高效。若使用ANSI编码,在调用WINDOWS提供的函数时,函数内部会把字符串先转换为UNICODE编码,再交给操作系统,当操作系统将字符串返还给程序时,还需要再执行一次UNICODEANSI的转换,因此会产生更多的时间和内存的开销。

 

l  UNICODE字符串的表示方法:

wchar_t    L ’A’; (类型为wchar_tWCHAR,大写L表示使用UNICODE编码)

 

l  推荐的字符和字符串处理方式:

(1)       用通用数据类型(如TCHAR/PTSTR)来表示字符串(这样兼容性更强);

(2)       TEXT_T宏表示字符串;

(3)       用明确的数据类型(如BYTEPBYTE)表示字节、缓冲区;

(4)       注意为字符串开辟空间的方式:

Malloc(nCharacters * sizeof(TCHAR))        推荐

Malloc(nCharacters)                     避免

(因为并不是任何情况下字符都占用1个字节)

(5)       MultiByteToWideChar( )        ANSIUNICODE

WideCharToMultiByte( )        UNICODEANSI

(6)       使用安全的字符串函数:


函数

表征符串大小的参数

字符串超长

安全性

strcpy

wcscpy

 

 

溢出

 

不安全

_tcscpy_s

_tcscat_s

 

字符个数(可用_countof函数计算)

 

置空

 

安全

StringCchCat

StringCchCopy

StringCchPrintf

 

字符个数

 

截断

 

安全

StringCbCat

StringCbCopy

StringCbPrintf

 

字符串所占字节数

 

截断

 

安全


(7)       比较两种字符串的函数:

CompareStringOrdinal:比较快,适用于文件名、路径XML元素、注册表项的比较;

CompareString:考虑用户区域设置,适用于比较用户字符串。    

你可能感兴趣的:(编程,windows,xml,读书,byte,微软)