宽字符与窄字符的转换
来源:互联网 发布:阿里云系统应用市场 编辑:程序博客网 时间:2024/05/21 22:26
最近在看opencv,无奈老外开发的东西TMD居然没有宽字符版本。
比如一个最简单的读取位图文件的
Mat imread( const string& filename, int flags=1 );
MSDN对转换宏介绍的不清不楚的,看源文件吧
/*atlconv.h*/#ifdef _UNICODE#define CT2A CW2A#else // !_UNICODE/*CT2A 被替换成CW2A CW2A实际是一个类CString Wstr(_T("this is a unicode string"));那么假如 CT2A str(Wstr);_CString重载了return LPCWSTR,因此是可以这样传递参数构造的_就构造了一个CW2A对象,这个对象str包含一个成员LPSTR m_psz;这个指针即转换后的窄字符buffer 指针,同样的,这个类也重载了return LPSTR,因此可以这样用char* exo=str(Wstr);*/class CW2AEX{public: CW2AEX(_In_z_ LPCWSTR psz) throw(...) : m_psz( m_szBuffer ) { Init( psz, _AtlGetConversionACP() ); } CW2AEX( _In_z_ LPCWSTR psz, _In_ UINT nCodePage) throw(...) : m_psz( m_szBuffer ) { Init( psz, nCodePage ); } ~CW2AEX() throw() { AtlConvFreeMemory(m_psz,m_szBuffer,t_nBufferLength); } _Ret_z_ operator LPSTR() const throw() { return( m_psz ); }private: void Init( _In_z_ LPCWSTR psz, _In_ UINT nConvertCodePage) throw(...) { if (psz == NULL) { m_psz = NULL; return; } int nLengthW = lstrlenW( psz )+1; int nLengthA = nLengthW*4; AtlConvAllocMemory(&m_psz,nLengthA,m_szBuffer,t_nBufferLength); BOOL bFailed=(0 == ::WideCharToMultiByte( nConvertCodePage, 0, psz, nLengthW, m_psz, nLengthA, NULL, NULL )); if (bFailed) { if (GetLastError()==ERROR_INSUFFICIENT_BUFFER) { nLengthA = ::WideCharToMultiByte( nConvertCodePage, 0, psz, nLengthW, NULL, 0, NULL, NULL ); AtlConvAllocMemory(&m_psz,nLengthA,m_szBuffer,t_nBufferLength); bFailed=(0 == ::WideCharToMultiByte( nConvertCodePage, 0, psz, nLengthW, m_psz, nLengthA, NULL, NULL )); } } if (bFailed) { AtlThrowLastWin32(); } }public: LPSTR m_psz; char m_szBuffer[t_nBufferLength];private: CW2AEX(_In_ const CW2AEX&) throw(); CW2AEX& operator=(_In_ const CW2AEX&) throw();};typedef CW2AEX<> CW2A;
0 0
- 宽字符与窄字符的转换
- 普通字符与宽字符的转换
- 宽字符与ANSI字符之间的相互转换
- linux 宽字符与多字节字符之间的转换
- 宽字符与ANSI字符之间的相互转换
- C++宽字符与普通字符的转换方法
- C++宽字符与普通字符的相互转换方法
- 字符ascii码与字符的转换
- 宽字符与窄字符的处理
- 宽字符与字符串的相互转换
- 字符与二进制的转换
- 字符与数字的转换
- 宽字符和窄字符的转换接口
- 宽字符和窄字符的转换接口
- 宽字符和窄字符的转换接口
- VS中常见的宽字符和窄字符转换
- 宽字符和窄字符之间的转换
- C++中宽字符和窄字符的相互转换
- 谓词函数
- android view第一次执行动画无效
- mysql权限覆盖
- 深入理解 Javascript 面向对象编程
- 启动mysql 报错,,Starting MySQL.Manager of pid-file quit without updating fi[失败] (2011-10-28 12:30:56)转载▼
- 宽字符与窄字符的转换
- android加密方式及原理
- 给编程初学者的干货:“秘籍”学好一本就不易
- 使用 Monit 监控PHP 服务中遇到的坑和解决办法
- 数据结构_3:栈:STL
- SpringMVC的几种返回方式
- 欢迎使用CSDN-markdown编辑器
- APP架构构思基本思路初稿
- teradata DISTINCT vs GROUP BY