《WINDOWS核心编程》读书笔记--第2章:Unicode

发布时间:2016-12-6 23:59:56 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"《WINDOWS核心编程》读书笔记--第2章:Unicode",主要涉及到《WINDOWS核心编程》读书笔记--第2章:Unicode方面的内容,对于《WINDOWS核心编程》读书笔记--第2章:Unicode感兴趣的同学可以参考一下。

在Win32 API中,也存在<mbstring.h>相类似的进行MBCS遍历的函数:Win32 API  mbstring.h  tchar.hCharNext  _mbsinc   _tcsincCharPrev  _mbsdec   _tcsdec 还有其他的函数如IsDBCSLeadByte是判断一个字节是否为DBCS字符的第一个字节,等。 在Win2000中,所有的核心函数都需要Unicode字符串,如果传递一个非Unicode字符,系统会分配一个内在块储存转换后的Unicode字符串,然后再传递给操作系统。返回值的情况类似。而Win98内部不支持Unicode,情况正好 与Win2000相反。WinCE只支持Unicode。 在编写Unicode程序时UNICODE宏用于Windows头文件,_UNICODE宏用于C运行期头文件。Windows头文件定义了用于Unicode的数据类型如WCHAR、PWSTR、PCWSTR,以及通用的PTSTR和PCTSTR。 在Win32 API中,函数以W为后缀的是接受Unicode的函数,以A结束的表示可以接受ANSI字符串。而使用的函数不带这些函数,那是因为这些“函数”是宏,如CreateWindowEX,在WinUser.h有如下定义:#ifdef UNICODE#define CreateWindowEx CreateWindowExW#else#define CreateWindowEx CreateWindowExA#endif在调用CreateWindowExA时,它会分配一个内存缓存,将字符串参数转化成Unicode字符串并放在缓存中,再调用CreateWindowExW,最后释放缓存,返回窗口句柄。而在Win98中,只能使用CreateWindowExA。 在Win32 API中还有一些和string.h中功能相同的函数,这些函数的名字是大小字母混写,和C运行期函数只用小写小写字母的习惯不同,如StrCat和strcat功能相同。还有一些以lstr开头的API,如lstrcat,在UNICODE版本中为lstrcatW,否则为lstrcatW。在比较字符串,这组函数中lstrcmp就比strcmp有意义,因为它是跟据不同的语言的特点进行比较的(在内部调用的是CompareString)。lstrcmpi和strcmp是在比较时忽略大小写。书上说,API IsTextUnicode在判断文本是否为Unicode字符串可能不准确。 下面的函数用于将多字节字符串转换成宽字符串:int MultiByteToWideChar( UINT uCodePage, DWORD wFlags,//通常为0 PCSTR pMultiByteStr, int cchMultiByte,//如果为-1,返回源字符串的长度 PSTR pWideCharStr, int cchWideChar//如果为0,返回转换后的字符个数 );使用这个函数时,可以用pWideCharStr调用它一次以确定要分配多大的内存,然后再调用它一次进行转换。下面的函数用于将宽字符串转换成多字节字符串:WideCharToMultiByte( UINT uCodePage, DWORD wFlags,//通常为0 PCSTR pMultiByteStr, int cchMultiByte,//如果为-1,返回源字符串的长度 PSTR pWideCharStr, int cchWideChar//如果为0,返回转换后的字符个数 PCSTR pDefaultChar, PBOOL pfUsedDefaultChar );在转换时,如果有的宽字符在使用的代码页中不能找到对应的表示法时,它将使用pDefaultChar指向的字符代替,如果这个参数为NULL,系统使用“?”,如果发生了替代,最后一个参数设为TRUE。 

上一篇:数据源+hibernate
下一篇:用C++实现简单的文件I/O操作(ifstream,ofstream)

相关文章

相关评论