也说VC下 UNICODE和ASCII字符串相互转换
2013-02-03 16:29
399 查看
ASCII与UNICODE编码是针对字符串而言的,就是说只有字符才具有编码这一说。工程项目建立后,一般就确定了工程类型:ASCII或UNICODE。但供应商提供的API中,有的是WCHAR指针、有的是CHAR指针,这样在调用供应商API时,字符串参数就需要做转换。为了在项目中,较方便的做字符串编码转换,这里提供一个封装类。其中用到了操作符重载。wuxfei@gmail.com。
接口申明:
接口实现:
如何使用:
接口申明:
/******************************************************************** created: 18:1:2013 17:09 filename: MyString.h author: wuxfei@gmail.com *********************************************************************/ #if !defined(AFX_MYSTRING_H__0295C9DA_9D25_4AF3_AC24_A24D377EAE89__INCLUDED_) #define AFX_MYSTRING_H__0295C9DA_9D25_4AF3_AC24_A24D377EAE89__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 /************************************************************************ * 实现ASCII与UNICODE字符串相互转换 ************************************************************************/ class CMyString { public: CMyString(); CMyString(LPCTSTR lp); virtual ~CMyString(); public: //获取ASCII字符串 operator LPCSTR(); //获取UNICODE字符串 operator LPCWSTR(); //接受赋值 void operator=(LPCTSTR lp); private: //释放内存空间 void FreeMemory(); private: CString m_strData; CHAR *m_pcData; WCHAR*m_pwData; }; #endif // !defined(AFX_MYSTRING_H__0295C9DA_9D25_4AF3_AC24_A24D377EAE89__INCLUDED_)
接口实现:
/******************************************************************** created: 18:1:2013 17:09 filename: MyString.cpp author: wuxfei@gmail.com *********************************************************************/ #include "stdafx.h" #include "MyString.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif //#ifndef _SAFE_DLT //#endif /************************************************************************ * 默认构造函数 ************************************************************************/ CMyString::CMyString() { m_strData.Empty(); m_pcData = NULL; m_pwData = NULL; this->operator =(m_strData); } /************************************************************************ * 带参数构造函数 ************************************************************************/ CMyString::CMyString(LPCTSTR lp) { m_strData = lp; m_pcData = NULL; m_pwData = NULL; this->operator =(lp); } /************************************************************************ * 析构函数 ************************************************************************/ CMyString::~CMyString() { FreeMemory(); } /************************************************************************ * 释放ASCII和UNICODE内存空间 ************************************************************************/ void CMyString::FreeMemory() { if (m_pcData) { delete []m_pcData; m_pcData = NULL; } if (m_pwData) { delete []m_pwData; m_pwData = NULL; } } /************************************************************************ * 当ASCII字符串使用 ************************************************************************/ CMyString::operator LPCSTR() { #ifndef _UNICODE return (LPCTSTR)m_strData; #else return m_pcData; #endif } /*********************************************************************** * 当UNICODE字符串使用 ************************************************************************/ CMyString::operator LPCWSTR() { #ifdef _UNICODE return (LPCTSTR)m_strData; #else return m_pwData; #endif } /************************************************************************ * 赋值操作 /************************************************************************/ void CMyString::operator=(LPCTSTR lp) { m_strData = lp; FreeMemory(); #ifdef _UNICODE ULONG nLen = WideCharToMultiByte(CP_ACP, 0, m_strData, -1, NULL, 0, NULL, NULL)+1; m_pcData = new CHAR[nLen]; WideCharToMultiByte(CP_ACP, 0, m_strData, -1, m_pcData, nLen-1, 0, 0); m_pcData[nLen-1] = 0x00; #else ULONG nLen = MultiByteToWideChar(CP_ACP, 0, m_strData, m_strData.GetLength(), NULL, 0)+1; m_pwData = new WCHAR[nLen]; MultiByteToWideChar(CP_ACP, 0, m_strData, m_strData.GetLength(), m_pwData, nLen-1); m_pwData[nLen-1] = 0x00; #endif }
如何使用:
CMyString str; str = _T("123中文"); char sz[256]; strcpy(sz, str); printf("ASCII输出=%s\n", sz); WCHAR wc[256]; wcscpy(wc, str); wprintf(L"UNICODE输出=%s\n", wc);小弟能力有限,欢迎大侠指正,wuxfei@gmail.com。
相关文章推荐
- C/C++中ASCII与Unicode字符串相互转换
- ASCII,UTF-8,Unicode字符串相互转换
- ASCII,UTF-8,Unicode字符串相互转换(转)
- ASCII,UTF-8,Unicode字符串相互转换(转)
- ASCII,UTF-8,Unicode字符串相互转换
- windows ASCII,UTF-8,Unicode字符串相互转换
- ASCII,UTF-8,Unicode字符串相互转换
- C++编程:ASCII,UTF-8,Unicode字符串相互转换
- utf,unicode,ascii字符串之间的相互转换
- 字符串编码格式相互转换Unicode --UTF-8 -- GBK
- ANSI,UNICODE, UTF-8 字符串之间的相互转换
- C# 八进制数值字符串转换成ASCII 字符串相互转换
- vc中GB2312,BIG5,Unicode相互转换
- Java 字符串与Unicode之间的相互转换
- VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本
- JAVA方法 字符串与unicode的相互转换
- JAVA方法 字符串与unicode的相互转换
- VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本
- VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本
- ASCII字符串与UNICODE字符串转换