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则执行全部测试;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值