Windows核心编程学习笔记(2)--Unicode与ANSI字符

Drecik学习经验分享

转载请注明出处:http://blog.csdn.net/drecik__/article/details/8078848

  1. Windows API函数基本上都有Unicode版和ANSI两个版本的函数,但是其实调用ANSI函数最终结果还是调用Unicode版本实现,所以开发时是用Unicode编码能提高效率和降低是用内存。
  2. 尽量是用安全字符串处理函数,在原有版本上加_s或者StringCch*函数来减少出错的机会
  3. 如果希望穿个缓冲区大小的字符数,则可以使用_countof()宏来传入,如果希望传入的是缓冲区的字节数则使用sizeof()传入
  4. Unicode与ANSI字符串的相互转换
    int MultiByteToWideChar(
    	UINT	CodePage,		// 代码页,如CP_ACP;
    	DWORD	dwFlags,		// 可为0;
    	LPCSTR	lpMultiByteStr,	// ANSI字符数组;
    	int		cbMultiByte,	// 字节数,-1则到0为止;
    	LPWSTR	lpWideCharStr,	// 宽字符数组;
    	int		cchWideChar);	// 宽字符字符数,传入0函数返回需要的字符数;
    int WideCharToMultiByte(
    	UINT	CodePage,			// 代码页;
    	DWORD	dwFlags,			// 标志,可为0;
    	LPCWSTR	lpWideCharStr,		// 宽字符数组;
    	int		cchWideChar,		// 字符数,传入-1则到\0结束;
    	LPSTR	lpMultiByteStr,		// ANSI数组;
    	int		cbMultiByte,		// 字节数,传入0,返回需要的字节数;
    	LPCSTR	lpDefaultChar,		// 遇到不能转换的宽字符时使用该字符代替;
    	LPBOOL	lpUsedDefaultChar);	// 当有字符被替换时返回TRUE;

  5. 测试字符串是否为Unicode字符串,使用IsTextUnicode,该函数使用一系列统计性和确定性方法来猜测缓冲区内容,所以可能为错误结果
    BOOL IsTextUnicode(
    	CONST VOID* lpv,	// 字符串缓冲区;
    	int iSize,			// 字节数;
    	LPINT lpiResult);	// 指定希望执行的测试,NULL则执行全部测试;



你可能感兴趣的:(编程,windows,api,测试,null)