VC++开发中最简单的Multi-Byte(ANSI)和Unicode互转方法,灵活使用Windows基本API:wsprintfA, wsprintfW
来源:互联网 发布:电信网络维护工程师 编辑:程序博客网 时间:2024/04/29 10:47
不少程序员都是从VC6.0的IDE下直接跳到VC8.0或者9.0下的。对新的IDE工程中默认的 Character Set 为 Use Unicode Character Set带来的诸多不习惯肯定深有体会。由于这个设置,我们必须要在所有的字符串前面加上宏_T()或者宏TEXT().
现在介绍一种简便的转换方法(无论什么 Character Set 都可以转换)
ANSI->Unicode
字符串
char szTemp[] = "hello world";
wchar_t szOut[0x100] = {0};
wsprintfW(szOut, L"%hs", szTemp);
单个字符
wsprintf(szOut, L"%hc", 'X');
Unicode->ANSI
字符串
wchar_t szTemp = L"hello world";
char szOut[0x100] = {0};
wsprintfA(szOut, "%ls", szTemp);
单个字符
wsprintf(szOut, "%lc", L'X');
%hs可以在任何Character Set情况下输入编码为ANSI的字符串
%ls可以在任何Character Set情况下输入编码为Unicode的字符串
同时,wsprintf这个函数最好用的地方是你可以把它当作C下的标准格式化输入sprintf来使用,除了sprintf的基本功能外,更增加了字符转换功能,非常方便。
需要注意的是,在wsprintfA中,%s默认的是ANSI,在wsprintfW中%s默认对应Unicode,如果搞混的话,会输出乱码的.
混合使用的例子:
现在,我们的工程设置Character Set为Use Unicode Character Set,有一个传入char*类型的函数,我们需要用默认的CreateFile来打开文件(Unicode下默认调用的CreateFile实际是CreateFileW)
bool Open(char* szName)
{
TCHAR szPath[0x100] = {0};
wsprintf(szPath, _T("C://Windows//System32//%hs.exe"), szName);
CreateFile(..., szPath, ...);
......
return true;
}
- VC++开发中最简单的Multi-Byte(ANSI)和Unicode互转方法,灵活使用Windows基本API:wsprintfA, wsprintfW
- ANSI UNICODE MULTI-BYTE 的区别
- 一个简单方便的ANSI和UNICODE互转方法
- Windows中使用的Unicode和ANSI函数
- MFC中ANSI与Unicode字符转换最简单方法
- Windows via C/C++ 学习(5)Windows中使用的Unicode和ANSI函数
- VS2010 Unicode和Multi-Byte
- VC Character Set Unicode or Multi-Byte
- Windows的ANSI和UNICODE字符集
- (转)规范化编程:ANSI和UNICODE的使用
- 规范化编程:ANSI和UNICODE的使用(转)
- VS2005中UNICODE和ANSI的区别
- 规范化编程:ANSI和UNICODE的使用
- 规范化编程:ANSI和UNICODE的使用
- 使用 UNICODE 和 ANSI 的混合编程
- 使用 UNICODE 和 ANSI 的混合编程
- ANSI UNICODE的使用
- 如何使用Unicode版和Ansi版API
- 时频分析与小波变换的发展历程(一)
- mysql 创建数据库,创建表
- HTTP.SYS 的内置驱动程序
- Sun Cluster工作原理介绍
- 使用Scribe来监控大型网络系统
- VC++开发中最简单的Multi-Byte(ANSI)和Unicode互转方法,灵活使用Windows基本API:wsprintfA, wsprintfW
- ClientDataSet的用法
- 时频分析与小波变换的发展历程(二)
- GAE支持和不支持的工具和框架
- JavaScript中innerText和innerHTML的区别
- 时频分析与小波变换的发展历程(三)
- Android程序反编译
- 研究 sso 要用到的两个系统参数
- CAB