QString将中文传给std::string

记录一下:

QString qStr = "哈哈";

string str = qStr.toUtf8().data();


str = CGb2312String(str.c_str());


CGb2312String, CUtf8String 转变到相应的编码格式,很有用的两个类。


#include <Windows.h>


class CUtf8String  
{  
public:  
inline CUtf8String(const char* gb2312)  
{  
m_bIsConst = true;  
#ifdef TEST_TYPE_MAP  
if (m[gb2312])  
{  
m_utf8 = m[gb2312];  
return ;  
}  
#endif  
int buffLen = 0;  
WCHAR wbuff[5120];  
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wbuff, 5120);  
buffLen = WideCharToMultiByte(CP_UTF8, 0, wbuff, -1, NULL, 0, 0, 0);  
m_utf8 = new char[buffLen+1];  
WideCharToMultiByte(CP_UTF8, 0, wbuff, -1, (LPSTR)m_utf8, buffLen, 0, 0);  
#ifdef TEST_TYPE_MAP  
m[gb2312] = m_utf8;  
#endif  
}  


inline CUtf8String(char* gb2312)  
{  
m_bIsConst = false;  
int buffLen = 0;  
WCHAR wbuff[5120];  
MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wbuff, 5120);  
buffLen = WideCharToMultiByte(CP_UTF8, 0, wbuff, -1, NULL, 0, 0, 0);  
m_utf8 = new char[buffLen+1];  
WideCharToMultiByte(CP_UTF8, 0, wbuff, -1, (LPSTR)m_utf8, buffLen, 0, 0);  
}  


inline ~CUtf8String()  
{  
#ifndef TEST_TYPE_MAP  
if (m_utf8)  
{  
delete m_utf8;  
m_utf8 = 0;  
}  
#else  
if (!m_bIsConst)  
{  
if (m_utf8)  
{  
delete m_utf8;  
m_utf8 = 0;  
}  
}  
#endif  
}  


inline operator char*()  
{  
return (char*)m_utf8;  
}  
private:  
const char* m_utf8;  
bool m_bIsConst;  
#ifdef TEST_TYPE_MAP  
static strmap m;  
#endif  
};  


class CGb2312String  
{  
public:  
inline CGb2312String(const char* utf8)  
{  
#ifdef TEST_TYPE_MAP  
if (m[utf8])  
{  
m_gb2312 = 0;  
m_gb2312 = m[utf8];  
}  
#endif  
int buffLen = 0;  
WCHAR wbuff[5120];  
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wbuff, 5120);  
buffLen = WideCharToMultiByte(CP_ACP, 0, wbuff, -1, NULL, 0, 0, 0);  
m_gb2312 = new char[buffLen+1];  
WideCharToMultiByte(CP_ACP, 0, wbuff, -1, (LPSTR)m_gb2312, buffLen, 0, 0);  
#ifdef TEST_TYPE_MAP  
m[utf8] = m_gb2312;  
#endif  
}  


inline CGb2312String(char* utf8)  
{  
#ifdef TEST_TYPE_MAP  
if (m[utf8])  
{  
m_gb2312 = 0;  
m_gb2312 = m[utf8];  
}  
#endif  
int buffLen = 0;  
WCHAR wbuff[5120];  
MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wbuff, 5120);  
buffLen = WideCharToMultiByte(CP_ACP, 0, wbuff, -1, NULL, 0, 0, 0);  
m_gb2312 = new char[buffLen+1];  
WideCharToMultiByte(CP_ACP, 0, wbuff, -1, (LPSTR)m_gb2312, buffLen, 0, 0);  
#ifdef TEST_TYPE_MAP  
m[utf8] = m_gb2312;  
#endif  
}  


inline ~CGb2312String()  
{  
#ifndef TEST_TYPE_MAP  
if (m_gb2312)  
{  
delete m_gb2312;  
m_gb2312 = 0;  
}  
#endif  
}  


inline operator char*()  
{  
return (char*)m_gb2312;  
}  
private:  
const char* m_gb2312;  
#ifdef TEST_TYPE_MAP  
static strmap m;  
#endif  
}; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值