如何同时提供ANSI和UNICODE函数
来源:互联网 发布:stc单片机 pca输出pwm 编辑:程序博客网 时间:2024/05/14 05:22
继前两篇文章之后,我们更加关心的问题是,我们可能为了方便他人的使用,需要提供ANSI和UNICODE版本的函数,此时,我们可以模
仿 Windows的作法,我们只编写UNICODE版本的函数,然后在ANSI版本的函数中,我们把多字符转换成UNICODE字符串,然后调用UNICODE版
本 的函数,完成之后,再把他还原成多字符集的字符串。
此处,引用示例,逆转字符串中所有字符的函数:
- BOOL StringReverseW(PWSTR pWideCharStr, DWORD cchLength)
- {
- PWSTR pEndOfStr = pWideCharStr + wcsnlen_s(pWideCharStr, cchLength) - 1;
- wchar_t cCharT;
- while(pWideCharStr < pEndOfStr)
- {
- //保存到一个临时变量中
- cCharT = *pWideCharStr;
- //把最后一个字符放进第一个字符中
- *pWideCharStr = *pEndOfStr;
- //把临时变量放进最后一个字符中
- *pEndOfStr = cCharT;
- //想左移动一个字符位置
- pWideCharStr++;
- //向右移动一个字符位置
- pEndOfStr--;
- }
- return TRUE;
- }
- BOOL StringReverseA(PSTR pMultiByteStr, DWORD cchLength)
- {
- PWSTR pWideCharStr;
- int nLenOfWideCharStr;
- BOOL fOk = FALSE;
- //获取需要转换字符串的大小
- nLenOfWideCharStr = MultiByteToWideChar(CP_ACP, 0,
- pMultiByteStr, cchLength, NULL, 0);
- //为字符串分配内存
- pWideCharStr = (PWSTR)HeapAlloc(GetProcessHeap(), 0,
- nLenOfWideCharStr * sizeof(wchar_t));
- if (NULL == pWideCharStr)
- {
- return fOk;
- }
- //转换成宽字符pWideCharStr
- MultiByteToWideChar(CP_ACP, 0, pMultiByteStr, cchLength,
- pWideCharStr, nLenOfWideCharStr);
- //使用宽字符函数进行处理
- fOk = StringReverseW(pWideCharStr, cchLength);
- if (fOk)
- {
- //转换为多字符
- WideCharToMultiByte(CP_ACP, 0, pWideCharStr, cchLength,
- pMultiByteStr, (int)strlen(pMultiByteStr), NULL, NULL);
- }
- //释放内存
- HeapFree(GetProcessHeap(), 0, pWideCharStr);
- return fOk;
- }
然后,我们可以在发布的.h头文件中,这样定义函数:
- BOOL StringReverseW(PWSTR pWideCharStr, DWORD cchLength)
- BOOL StringReverseA(PSTR pMultiByteStr, DWORD cchLength)
- #ifdef UNICODE
- #define StringReverse StringReverseW
- #else
- #define StringReverse StringReverseA
- #endif
这样,使用我们函数的人,也就不用再为是否是UNICODE或是ANSI而焦头烂额了。
同系列文章参看:
《多字符集(ANSI)和UNICODE及字符串处理方式准则》
《 UNICODE和ANSI字符串的转换 》
原文地址:
http://blog.csdn.net/blpluto/article/details/5755358
- 如何同时提供ANSI和UNICODE函数
- SQLite的C++类,同时支持ANSI 和UNICODE编码
- ANSI 和 Unicode 字符函数对照表
- ANSI 和 Unicode 字符串函数补充
- ANSI 和 Unicode 字符函数对照表
- ANSI 和 UNICODE 的函数对应表
- ANSI 和 UNICODE 的函数对应表
- Windows中的Unicode和ANSI 函数
- ANSI 和 UNICODE 的函数对应表
- ANSI和UNICODE字符串处理函数
- 字符串Unicode和ANSI互转函数
- ANSI和UNICODE字符串处理函数
- 【整理】ANSI和UNICODE字符串处理函数
- DLL中导出ANSI和UNICODE函数
- ANSI和UNICODE字符串处理函数
- 常用函数unicode ansi
- UNICODE to ANSI 和 ANSI to UNICODE
- UNICODE 和 ANSI 互转
- 关于JPanel设置背景图片的Bug说明
- 一起来学POSIX thread 之 综合应用——线程池
- pat 1019
- linux syslog日志服务
- Vray查看发光贴图缓存文件
- 如何同时提供ANSI和UNICODE函数
- hdu 4386 Quadrilateral
- 国外GIS 网站 一网打尽
- 数据库索引之B-树与B+树
- 中国gis公司
- 图解红外遥控的发射和接收原理
- IOS基础:Objective-C 字符串处理
- xml、dtd、schema
- Tomcat -- Realm组件