परिवर्तित करें मैं std :: wstring को const * char में C++ में कैसे परिवर्तित कर सकता हूं?cd+ wstring to const * char में C++
उत्तर
आप c_str
सदस्य समारोह का उपयोग कर एक एक const wchar_t *
को std::wstring
परिवर्तित कर सकते हैं:
std::wstring s;
const wchar_t *str = s.c_str();
हालांकि, एक const char *
में रूपांतरण प्राकृतिक नहीं है: यह std::wcstombs
के लिए एक अतिरिक्त कॉल की आवश्यकता है।
क्या आप wcstombs सहित एक पूर्ण उदाहरण दे सकते हैं? मैं आपको जिस तरह से सुझाव देता हूं उसे हल करने की कोशिश कर रहा हूं। –
जब wstring wStr है: 'const wchar_t * str = wStr.c_str(); size_t आकार = wcslen (str) * 2 + 2; चार * स्टार्टपॉइंट = नया चार [आकार]; size_t c_size; wcstombs_s (& c_size, स्टार्टपॉइंट, आकार, str, आकार); ' – arielhad
@arielhad आकार परिभाषा के अंत में +2 क्यों? इसके अलावा, आकार के लिए यह 'फॉर्मूला' मानता है कि चार 8 बिट है, और wchar_t 16 बिट है, है ना? मुझे लगता है कि यह कॉलिंग आकार() लिखना बेहतर होगा क्योंकि यह सभी प्लेटफार्मों के लिए जरूरी नहीं है। – KjMag
आप ऐसा ही नहीं कर सकते हैं। std::wstring
विस्तृत (यूनिकोड) वर्णों की एक स्ट्रिंग का प्रतिनिधित्व करता है, जबकि इस मामले में char*
ASCII वर्णों की एक स्ट्रिंग है। यूनिकोड से ASCII तक कोड पेज रूपांतरण होना चाहिए।
रूपांतरण करने के लिए आप wcstombs
, या विंडोज़ WideCharToMultiByte
फ़ंक्शन जैसे मानक लाइब्रेरी फ़ंक्शंस का उपयोग कर सकते हैं।
टिप्पणियों से जानकारी को शामिल करने के लिए अपडेट किया गया, यह इंगित करने के लिए धन्यवाद।
मानक पुस्तकालय इसे संभालता है। उदाहरण के लिए, 'wcrtomb',' wcsrtombs' देखें। – nothrow
@Yossarian: मानक लाइब्रेरी के कार्यों के साथ समस्या यह है कि मानक परिभाषित नहीं करता है कि कौन सा विस्तृत चरित्र सेट है, और न ही यह परिभाषित करता है कि कौन सा बहु बाइट वर्ण सेट, 'wcstombs' में उपयोग किया जाता है। यदि आपको स्ट्रिंग को एक विशिष्ट एन्कोडिंग (जैसे कि यूटीएफ -8) में प्राप्त करने की आवश्यकता है, तो आपको स्वयं रूपांतरण को लिखना होगा, या प्लेटफ़ॉर्म विशिष्ट एक्सटेंशन (जैसे वाइडचारटोमल्टी बाइट) का उपयोग करना होगा –
std :: स्ट्रिंग में यूटीएफ- 8 और std :: wstring का विवाह यूटीएफ -16/यूटीएफ -32 से नहीं हुआ है। तो यह एक बहुत भ्रामक जवाब है। – anno
- 1. char ** से const char **
- 2. "const char *" से "char" त्रुटि
- 3. CSTring को const char *
- 4. 'wchar_t *' से 'const char *'
- 5. मैं सी में 'char **' को 'const char * const *' में क्यों परिवर्तित नहीं कर सकता?
- 6. char * const argv [] क्या है?
- 7. libxml2 xmlChar * char to cast *
- 8. अद्वितीय_ptr <char[]> से unique_ptr <const char []>
- 9. Visual C++ 2012 में bad_alloc (const char *) को निजी क्यों बनाया गया था?
- 10. std :: string को const char * में कैसे परिवर्तित करें?
- 11. स्ट्रू के वेक्टर को पास करने के लिए कैसे करें (char const * const * const)?
- 12. std :: string में एक const char * को कैसे स्टोर करें?
- 13. कोड में कॉन्स्ट char * और const char [] के प्रकार की पहचान कैसे करें?
- 14. int मुख्य (int, char const * const *) अच्छी तरह से गठित किया गया है?
- 15. आप LPCWSTR से const char * को कैसे परिवर्तित करते हैं?
- 16. `स्थिर const`` बनाम const`
- 17. const int = int const?
- 18. stl map <char*,char*> destructor
- 19. C++
- 20. "__rvm_do_with_env_before" और "__rvm_after_cd" "cd"
- 21. अंत में "const" क्यों डालें?
- 22. execv() और const-ness
- 23. Convert चटाई और C/C++
- 24. char *
- 25. C++
- 26. C++ शैली डाली चार *
- 27. कॉन्स char * [] घोषणा
- 28. मैं एक स्ट्रिंग को एक char * में C++ में कैसे परिवर्तित करूं?
- 29. boost :: संस्करण - "const char *" क्यों "बूल" में परिवर्तित किया गया है?
- 30. char
कई तरीके हैं। आपके लिए कौन सा सही है, उन तथ्यों पर निर्भर करता है जो आपने प्रदान नहीं किए हैं। आप किस एन्कोडिंग का परिणाम चाहते हैं? आप किस मंच/एन्कोडिंग रूपांतरण lib का उपयोग कर रहे हैं? – sbi
कौन सा ऑपरेटिंग सिस्टम? कम से कम विंडोज़ पर आपको इसे शायद ही कभी करना चाहिए, उदा। अगर आप एक फाइल में यूटीएफ -8 स्ट्रिंग लिखना चाहते हैं। – Philipp
यह है "[पूर्ण न्यूनतम प्रत्येक सॉफ्टवेयर डेवलपर बिल्कुल, यूनिकोड और कैरेक्टर सेट्स (कोई बहाना नहीं है!) के बारे में जानना चाहिए (http://www.joelonsoftware.com/articles/Unicode.html)", जिसे पढ़ा जाना चाहिए ! – Jaywalker