Drecik学习经验分享
转载请注明出处:http://blog.csdn.net/drecik__/article/details/8078848
- Windows API函数基本上都有Unicode版和ANSI两个版本的函数,但是其实调用ANSI函数最终结果还是调用Unicode版本实现,所以开发时是用Unicode编码能提高效率和降低是用内存。
- 尽量是用安全字符串处理函数,在原有版本上加_s或者StringCch*函数来减少出错的机会
- 如果希望穿个缓冲区大小的字符数,则可以使用_countof()宏来传入,如果希望传入的是缓冲区的字节数则使用sizeof()传入
- 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;
- 测试字符串是否为Unicode字符串,使用IsTextUnicode,该函数使用一系列统计性和确定性方法来猜测缓冲区内容,所以可能为错误结果
BOOL IsTextUnicode( CONST VOID* lpv, // 字符串缓冲区; int iSize, // 字节数; LPINT lpiResult); // 指定希望执行的测试,NULL则执行全部测试;