दिलचस्प पोस्ट
समूह की संख्या जानने के बिना कमेन्स? C ++ में हेक्स स्ट्रिंग में पूर्णांक dyld: पुस्तकालय लोड नहीं किया गया: @ rpath / libswiftCore.dylib / Image नहीं मिला केवल तत्व के लिए सीएसएस शैलियाँ रीसेट / हटाएं जावास्क्रिप्ट में खाली स्ट्रिंग के लिए आप कैसे जांचें? आईईईई फ्लोट्स की तुलना और समानता के लिए युगल हर मॉडल वर्ग में JSON धारावाहिक जोड़ें? CodeIgniter: "आप अपलोड करने का प्रयास कर रहे फ़ाइल प्रकार की अनुमति नहीं है।" बड़े पैमाने पर ईमेल / थोक ईमेलिंग के लिए वेब मेल कंपनियों द्वारा अवरुद्ध होने से बचें? पायथन अनुरोध मॉड्यूल को छोड़कर / कोशिश करने का सही तरीका है? क्यों नहीं os.path.join () इस मामले में काम करता है? $ (यह) AJAX सफलता के अंदर काम नहीं कर रहा है जब त्रुटि.नेटवर्क रिस्पॉन्सस रिक्त है तो एंड्रॉइड वॉली में एचटीपीपी स्थिति कोड दृश्यमान अनुपलब्ध – ** और छिपा हुआ – ** बूटस्ट्रैप v4 में सिस्टम सेटिंग में अधिसूचना सेटिंग गतिविधि को कैसे जोड़ें

C ++ .NET कन्वर्ट सिस्टम :: स्ट्रिंग टू std :: string

आप कैसे सिस्टम :: स्ट्रिंग को std :: string में C ++ .NET परिवर्तित कर सकते हैं?

Solutions Collecting From Web of "C ++ .NET कन्वर्ट सिस्टम :: स्ट्रिंग टू std :: string"

यदि आप .net के हाल के संस्करण का उपयोग कर रहे हैं तो क्लीनर सिंटैक्स है

#include "stdafx.h" #include <string> #include <msclr\marshal_cppstd.h> using namespace System; int main(array<System::String ^> ^args) { System::String^ managedString = "test"; msclr::interop::marshal_context context; std::string standardString = context.marshal_as<std::string>(managedString); return 0; } 

यह आपको अपवादों के चेहरे में बेहतर साफ-सफाई देता है।

विभिन्न अन्य रूपांतरणों के लिए एक एमएसडीएन लेख है

और सी ++ / सीएलआई के बाद के संस्करणों में "आसान तरीके" के जवाब में, आप इसे marshal_context बिना कर सकते हैं। मुझे यह पता है कि विजुअल स्टूडियो 2010 में काम करता है; इससे पूर्व के बारे में निश्चित नहीं है


 #include "stdafx.h" #include <string> #include <msclr\marshal_cppstd.h> using namespace msclr::interop; int main(array<System::String ^> ^args) { System::String^ managedString = "test"; std::string standardString = marshal_as<std::string>(managedString); return 0; } 

 stdString = toss(systemString); static std::string toss( System::String ^ s ) { // convert .NET System::String to std::string const char* cstr = (const char*) (Marshal::StringToHGlobalAnsi(s)).ToPointer(); std::string sstr = cstr; Marshal::FreeHGlobal(System::IntPtr((void*)cstr)); return sstr; } 

सी # अपनी तारों के लिए UTF16 प्रारूप का उपयोग करता है
तो, बस प्रकारों को परिवर्तित करने के अलावा, आपको स्ट्रिंग के वास्तविक स्वरूप के बारे में भी सचेत होना चाहिए।

मल्टी-बाइट कैरेक्टर के लिए संकलन करते समय विजुअल स्टूडियो सेट होता है और विन एपीआई यूटीएफ 8 (वास्तविक विंडोज एन्कोडिंग जो विंडोज़-285 9 1 है ) को मानता है ।
यूनिकोड वर्ण सेट के लिए दृश्य स्टूडियो सेट करते समय और विन एपीआई UTF16 ग्रहण करता है।

इसलिए, आपको स्ट्रिंग को UTF16 से UTF8 प्रारूप में भी परिवर्तित करना होगा, और न सिर्फ स्टड :: स्ट्रिंग में परिवर्तित करना चाहिए।
कुछ गैर-लैटिन भाषाओं जैसे बहु-चरित्र स्वरूपों के साथ काम करते समय यह आवश्यक हो जाएगा।

यह विचार यह तय करना है कि std::wstring हमेशा UTF16 का प्रतिनिधित्व करता है।
और std::string हमेशा यूटीएफ 8 का प्रतिनिधित्व करती है।

इसे संकलक द्वारा लागू नहीं किया गया है, यह एक अच्छी नीति है कि वह हो।

 #include "stdafx.h" #include <string> #include <msclr\marshal_cppstd.h> using namespace System; int main(array<System::String ^> ^args) { System::String^ managedString = "test"; msclr::interop::marshal_context context; //Actual format is UTF16, so represent as wstring std::wstring utf16NativeString = context.marshal_as<std::wstring>(managedString); //C++11 format converter std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert; //convert to UTF8 and std::string std::string utf8NativeString = convert.to_bytes(utf16NativeString); return 0; } 

या इसे अधिक कॉम्पैक्ट सिंटैक्स में रखें:

 int main(array<System::String ^> ^args) { System::String^ managedString = "test"; msclr::interop::marshal_context context; std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert; std::string utf8NativeString = convert.to_bytes(context.marshal_as<std::wstring>(managedString)); return 0; } 

मेरे ऊपर दिए गए उत्तरों के साथ बहुत अधिक अस्पष्ट त्रुटियां दिख रही हैं (हाँ, मैं सी ++ नोब हूँ)

यह स्ट्रिंग को सी # से सी ++ सीएलआई भेजने के लिए मेरे लिए काम किया

सी#

 bool result; result = mps.Import(mpsToolName); 

सी ++ सीएलआई

समारोह:

 bool ManagedMPS::Import(System::String^ mpsToolNameTest) std::string mpsToolName; mpsToolName = toStandardString(mpsToolNameTest); 

फ़ंक्शन जो स्ट्रिंग ^ से std :: string को परिवर्तित करने से काम करता है

 static std::string toStandardString(System::String^ string) { using System::Runtime::InteropServices::Marshal; System::IntPtr pointer = Marshal::StringToHGlobalAnsi(string); char* charPointer = reinterpret_cast<char*>(pointer.ToPointer()); std::string returnString(charPointer, string->Length); Marshal::FreeHGlobal(pointer); return returnString; } 

अधिक शोध पर, ऐसा प्रतीत होता है कि यह क्लीनर और सुरक्षित है

मैं इसके बजाय इस विधि का उपयोग करने के लिए स्विचित

 std::string Utils::ToUnmanagedString(String^ stringIncoming) { std::string unmanagedString = marshal_as<std::string>(stringIncoming); return unmanagedString; } 

Windows रनटाइम घटक बनाना आप उपयोग कर सकते हैं:

 String^ systemString = "Hello"; std::wstring ws1(systemString ->Data()); std::string standardString(ws1.begin(), ws1.end());