मैं एक विधि की तलाश कर रहा हूं, या LPCWSTR के लिए std :: string को परिवर्तित करने के लिए एक कोड स्निपेट
मैं एक विधि की तलाश कर रहा हूं, या LPCWSTR के लिए std :: string को परिवर्तित करने के लिए एक कोड स्निपेट
जवाबों:
MSDN लेख के लिंक के लिए धन्यवाद। यही वह है जिसकी तलाश में मैं हूं।
std::wstring s2ws(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
std::wstring stemp = s2ws(myString);
LPCWSTR result = stemp.c_str();
समाधान वास्तव में किसी भी अन्य सुझावों की तुलना में बहुत आसान है:
std::wstring stemp = std::wstring(s.begin(), s.end());
LPCWSTR sw = stemp.c_str();
सभी के सर्वश्रेष्ठ, यह स्वतंत्र मंच है। h2h :)
reinterpret_cast
। यह कोड काम नहीं करता है। प्रयोग नहीं करें। ।
char
आमतौर पर ANSI के रूप में एन्कोड किया गया है। एएनएसआई एन्कोडिंग के साथ, 255 के माध्यम से 128 के मानों की व्याख्या वर्तमान में सक्रिय कोड पेज का उपयोग करके की जाती है। उन मूल्यों को एक wchar_t
(विंडोज़ पर UTF-16 एन्कोडिंग) में दिखाने से वांछित परिणाम नहीं होगा। यदि आप सटीक होना चाहते हैं, तो यह ठीक 50% मामलों में काम करता है। DBCS वर्ण एन्कोडिंग को ध्यान में रखते हुए, वह प्रतिशत और घट जाता है।
यदि आप ATL / MFC वातावरण में हैं, तो आप ATL रूपांतरण मैक्रो का उपयोग कर सकते हैं:
#include <atlbase.h>
#include <atlconv.h>
. . .
string myStr("My string");
CA2W unicodeStr(myStr);
फिर आप LPCWSTR के रूप में unicodeStr का उपयोग कर सकते हैं। यूनिकोड स्ट्रिंग के लिए मेमोरी को स्टैक पर बनाया जाता है और फिर यूनिकोडस्ट्र के लिए विध्वंसक जारी किया जाता है।
एक std :: string का उपयोग करने के बजाय, आप एक std :: wstring का उपयोग कर सकते हैं।
संपादित करें: क्षमा करें यह अधिक व्याख्यात्मक नहीं है, लेकिन मुझे दौड़ना होगा।
Std :: wstring :: c_str () का उपयोग करें
string myMessage="helloworld";
int len;
int slength = (int)myMessage.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, myMessage.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, myMessage.c_str(), slength, buf, len);
std::wstring r(buf);
std::wstring stemp = r.C_str();
LPCWSTR result = stemp.c_str();
LPCWSTR lpcwName = std :: wstring (strname.begin (), strname.begin ())। C_str ()