《Windows核心编程》读书心得——字符和字符串处理(1)
来源:互联网 发布:神优化的单机游戏 编辑:程序博客网 时间:2024/06/05 11:31
l ANSI和UNICODE编码:
ANSI编码中,1个字符可能占一个字节、两个字节甚至多个字节,且不同国家的文字有不同的规定,存在字符库的冲突。
UNICODE编码(包括UTF-8、UTF-16、UTF-32,最常用的是UTF-16),以UTF-16为例,每个字符占用固定大小的字节数(2个字节),当然,少数无法用2字节表示的字符除外(这些字符可用代理,4字节表示)。UNICODE编码中,不同国家的文字分在不同的码段,不存在字符库的冲突,更有利于计算机的全球化需要。因此,微软提倡使用UNICODE编码,在WINDOWS NT以后的操作系统中,都是以UNICODE编码的。
建议:我们自己写在WINDOWS下运行的程序,最好也使用UNICODE编码,因为这样更高效。若使用ANSI编码,在调用WINDOWS提供的函数时,函数内部会把字符串先转换为UNICODE编码,再交给操作系统,当操作系统将字符串返还给程序时,还需要再执行一次UNICODE到ANSI的转换,因此会产生更多的时间和内存的开销。
l UNICODE字符串的表示方法:
wchar_t c = L ’A’; (类型为wchar_t或WCHAR,大写L表示使用UNICODE编码)
l 推荐的字符和字符串处理方式:
(1) 用通用数据类型(如TCHAR/PTSTR)来表示字符串(这样兼容性更强);
(2) 用TEXT或_T宏表示字符串;
(3) 用明确的数据类型(如BYTE和PBYTE)表示字节、缓冲区;
(4) 注意为字符串开辟空间的方式:
Malloc(nCharacters * sizeof(TCHAR)) 推荐
Malloc(nCharacters) 避免
(因为并不是任何情况下字符都占用1个字节)
(5) MultiByteToWideChar( ) ANSI转UNICODE
WideCharToMultiByte( ) UNICODE转ANSI
(6) 使用安全的字符串函数:
函数
表征符串大小的参数
字符串超长
安全性
strcpy
wcscpy
无
溢出
不安全
_tcscpy_s
_tcscat_s
字符个数(可用_countof函数计算)
置空
安全
StringCchCat
StringCchCopy
StringCchPrintf
字符个数
截断
安全
StringCbCat
StringCbCopy
StringCbPrintf
字符串所占字节数
截断
安全
(7) 比较两种字符串的函数:
CompareStringOrdinal:比较快,适用于文件名、路径XML元素、注册表项的比较;
CompareString:考虑用户区域设置,适用于比较用户字符串。
- 《Windows核心编程》读书心得——字符和字符串处理(1)
- Windows核心编程笔记——字符和字符串处理
- 《Windows核心编程》读书心得——进程(3)
- 《Windows核心编程》读书心得——DLL(6)
- 【Windows 核心编程】Windows 核心编程 -- 字符和字符串处理
- Windows核心编程:字符和字符串处理
- 字符和字符串处理 《Windows核心编程》
- Windows核心编程:字符和字符串处理
- Windows核心编程 字符和字符串处理
- 《Windows核心编程》读书心得——内存(堆和栈)(5)
- Windows核心编程(二)字符和字符串处理
- 《Windows核心编程》——二字符与字符串处理
- windows核心编程系列学习记录2——字符和字符串处理
- windows核心编程心解--字符和字符串处理
- 《Windows核心编程5》第二章-字符和字符串处理
- windows核心编程学习日记-字符和字符串处理 上篇
- Windows核心编程002-字符和字符串处理
- windows核心编程 第2章 字符和字符串处理
- URLDecode的最初级使用
- 学习PHP中的XML解析
- POJ 1141 Brackets Sequence 动态规划
- linux的常用命令
- TypeList 之 NoDuplicate
- 《Windows核心编程》读书心得——字符和字符串处理(1)
- Chapter3 Windows and Messages —— Programming Windows 笔记
- [NPWP笔记]perl创建进程
- 制作Java Applet签名验证
- MFC 中 WM_NOTIFY messages 传递过程
- 转发屠夫大牛使用未公开API ZwQueryVirtualMemory 枚举进程模块的函数例子
- 流水灯&万用板
- vs2005 无法新建 c++ Smart Device的工程解决方案
- “简单没那么容易做到”