unicode和多字节字符中CString转string方法,可解决中文乱码的问题

unicode和多字节字符中CString转string方法,可解决中文乱码的问题下文提供两个函数接口 分别实现 unicode 字符集下与多字节字符集下的 CString 转 string nbsp 1 unicode 字符集下 CString 转 string nbsp stringCStrin CStringcsStr intiLen csStrData GetLength 1 char pSrc csStrData GetBuffer iL

下文提供两个函数接口,分别实现unicode字符集下与多字节字符集下的CString转string 

1、unicode字符集下CString转string 

string CString2string(CString csStrData) { int iLen = csStrData.GetLength() + 1; char* pSrc = csStrData.GetBuffer(iLen * sizeof(char)); string strRet = string(pSrc); csStrData.ReleaseBuffer(iLen); return strRet; }

2、多字节字符集下的CString转string 

string CString2string(CString csStrData) { int iLen = csStrData.GetLength() + 1; char* pSrc = new char[iLen]; if (pSrc == NULL) { return ""; } memset(pSrc, 0, iLen); wchar_t* pwSrc = NULL; pwSrc = csStrData.GetBuffer(iLen * sizeof(wchar_t)); WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)pwSrc, -1, pSrc, iLen, NULL, NULL); string strRet = string(pSrc); delete [] pSrc; csStrData.ReleaseBuffer(iLen); return strRet; }

3、一个整合的方法,适用于WIN32和win64

string CString2string(CString csStrData) { string strRet ; char* pRet = NULL; int icsLen = csStrData.GetLength() + 1; #if (defined(_WIN64)) wchar_t* wptr = NULL; wptr = csStrData.GetBuffer(icsLen * sizeof(wchar_t)); int icLen = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wptr, icsLen, NULL, 0, NULL, NULL); do { pRet = new char[icLen]; if (NULL == pRet) { return ""; } WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wptr, icsLen, pRet, icLen, NULL, NULL); pRet[icLen] = '\0'; strRet = string(pRet); delete [] pRet; } while (0); csStrData.ReleaseBuffer(icsLen); #else pRet = csStrData.GetBuffer(icsLen * sizeof(char)); strRet = string(pRet); csStrData.ReleaseBuffer(icsLen); #endif return strRet; }

附一个string转wchar_t* 

例如:

string str("你好中国"); wchar_t* wc = new wchar_t[str.size()]; swprintf(wc, 100, L"%S", str.c_str()); //注意大写 //wc指向的内存区域存储这wchar_t类型的 ”你好中国“。












版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214408.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:20
下一篇 2026年3月18日 下午4:20


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号