C++,有没有可以将LPCWSTR类型转换成string的简单点的方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++,有没有可以将LPCWSTR类型转换成string的简单点的方法?相关的知识,希望对你有一定的参考价值。

参考技术A BOOL WCharToMByte(LPCWSTR lpcwszStr, string &str)

DWORD dwMinSize = 0;
LPSTR lpszStr = NULL;
dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
if(0 == dwMinSize)

return FALSE;

lpszStr = new char [dwMinSize];
WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwMinSize,NULL,FALSE);
str = lpszStr;
delete [] lpszStr;
return TRUE;
本回答被提问者采纳
参考技术B LPCWSTR和CString 可以相互转化,LPCWSTR的原型是 const unsigned short * , 它不能直接转化成string 。可以先将LPCWSTR转化成CString,再将CString转化成string
代码如下:
LPCWSTR pcwStr = L"TestpwcStr";
CString str(pcwStr);
string s(CString.GetBuffer());
参考技术C string UnicodeToANSI( const wstring& str )

char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte( CP_ACP,
0,
str.c_str(),
-1,
NULL,
0,
NULL,
NULL );
pElementText = new char[iTextLen + 1];
memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
WideCharToMultiByte( CP_ACP,
0,
str.c_str(),
-1,
pElementText,
iTextLen,
NULL,
NULL );
string strText;
strText = pElementText;
delete[] pElementText;
return strText;

直接给你这个函数拿去用吧,不用管它是怎么实现的,简单吧?内部调用了WINDOWS API,所以别忘了加上#include <windows.h>。

以上是关于C++,有没有可以将LPCWSTR类型转换成string的简单点的方法?的主要内容,如果未能解决你的问题,请参考以下文章

关于char转换成LPCWSTR的问题

QString与LPCWSTR 带中文的相互转换

Qt QString 和 LPCWSTR 的相互转换

LPCWSTR 和char数组的转换

如何将string类型的数字转换成int

164VS2022下VC++调用CreateFile文件名不能接受char*,包括强制转换成LPCWSTR的char*也会出错