C++多字节与宽字节间的转换(wchar_t与char转换)

转自:http://www.linuxidc.com/Linux/2012-05/60869.htm

#include <iostream>   
using namespace std;  
class CUser  
{  
public:  
	CUser();  
	virtual~ CUser();  
	char* WcharToChar(wchar_t* wc);//宽字节转单字节   
	wchar_t* CharToWchar(char* c); //单字节转宽字节   
	void Release();//释放资源   
private:  
	char* m_char;  
	wchar_t* m_wchar;  
};  
/   
/*字符类型        wchar_t     char 
/*获取字符长度    wcslen()    strlen() 
/*连接两个字符串  wcscat()    strcpy() 
/*复制字符串      wcscpy()    strcpy() 
/*比较两个字符串  wcscmp()    strcmp() 
/*具体参数详见www.linuxidc.com*/  
   
CUser::CUser()  
:m_char(NULL)  
,m_wchar(NULL)  
{  
}  
CUser::~CUser()  
{  
	Release();  
}  

//宽字节转单字节   
char* CUser::WcharToChar(wchar_t* wc)  
{  
	Release();  
	int len= WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),NULL,0,NULL,NULL);  
	m_char=new char[len+1];  
	WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),m_char,len,NULL,NULL);  
	m_char[len]='\0';  
	return m_char;  
}  

 //单字节转宽字节   
wchar_t* CUser::CharToWchar(char* c)  
{  
	Release();  
	int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
	m_wchar=new wchar_t[len+1];  
	MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
	m_wchar[len]='\0';  
	return m_wchar;  
}  

//释放资源   
void CUser::Release()  
{  
	if(m_char)  
	{  
		delete m_char;  
		m_char=NULL;  
	}  
	if(m_wchar)  
	{  
		delete m_wchar;  
		m_wchar=NULL;  
	}  
}  

//使用的时候非常简单了:

WCHAR* wc;  
CUser u;  
char* c=u.WcharToChar(wc);  
cout<<c<<endl;  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值