मैं TCHAR
सरणी को std::string
(std::basic_string
पर नहीं) कैसे परिवर्तित करूं?एक TCHAR सरणी को std :: string में कैसे परिवर्तित करें?
उत्तर
TCHAR
सिर्फ एक टाइपिफ़ है कि, आपके संकलन विन्यास के आधार पर, या तो char
या wchar
पर डिफ़ॉल्ट है।
मानक टेम्पलेट लाइब्रेरी ASCII (std::string
के साथ) और विस्तृत वर्ण सेट (std::wstring
के साथ) दोनों का समर्थन करता है। आपको बस इतना करना है कि टाइपपीफ स्ट्रिंग :: स्ट्रिंग :: स्ट्रिंग :: std :: wstring के रूप में स्ट्रिंग आपके संकलन कॉन्फ़िगरेशन के आधार पर है। लचीलापन बनाए रखने के लिए आप निम्नलिखित कोड का उपयोग कर सकते हैं:
#ifndef UNICODE
typedef std::string String;
#else
typedef std::wstring String;
#endif
अब आप अपने कोड में String
उपयोग कर सकते हैं और संकलक बुरा भागों संभालने दें। स्ट्रिंग में अब रचनाकार होंगे जो आपको TCHAR
से std::string
या std::wstring
रूपांतरित करने देता है।
समस्या यह है कि मुझे एक इंटरफ़ेस कॉल करना है जो std :: स्ट्रिंग स्वीकार करता है, इसलिए मैं std :: wstring भेज नहीं सकता :( – ashmish2
देखें [यह प्रश्न] (http://stackoverflow.com/questions/4804298/c-how-to- wstring-string-string/4804506 # 4804506) wstring से स्ट्रिंग में कनवर्ट करने के लिए कैसे करें। – kbjorklu
यूनिकोड वातावरण में 'cout' के साथ 'स्ट्रिंग' कैसे काम करता है? –
आपकी परियोजना सेटिंग्स के आधार पर, TCHAR प्रकार char
या wchar_t
है।
#ifdef UNICODE
// TCHAR type is wchar_t
#else
// TCHAR type is char
#endif
तो अगर आप std::wstring
के बजाय std::string
का उपयोग करना चाहिए, तो आप एक कनवर्टर समारोह का उपयोग करना चाहिए। मैं wcstombs
या WideCharToMultiByte
का उपयोग कर सकता हूं।
TCHAR * text;
#ifdef UNICODE
/*/
// Simple C
const size_t size = (wcslen(text) + 1) * sizeof(wchar_t);
wcstombs(&buffer[0], text, size);
std::vector<char> buffer(size);
/*/
// Windows API (I would use this)
std::vector<char> buffer;
int size = WideCharToMultiByte(CP_UTF8, 0, text, -1, NULL, 0, NULL, NULL);
if (size > 0) {
buffer.resize(size);
WideCharToMultiByte(CP_UTF8, 0, text, -1, static_cast<BYTE*>(&buffer[0]), buffer.size(), NULL, NULL);
}
else {
// Error handling
}
//*/
std::string string(&buffer[0]);
#else
std::string string(text);
#endif
मैंने इसे आजमाया, मिला: त्रुटि C2664: 'std :: basic_string <_Elem, _Traits, _Ax> :: basic_string (const std :: basic_string <_Elem, _Traits, _Ax> &)': 'TCHAR से पैरामीटर 1 को परिवर्तित नहीं कर सकता [ 50] 'to' const std :: basic_string <_Elem, _Traits, _Ax> और ' –
@ user396483: मैंने बस इसे VS2012 में आजमाया। कोड: [लिंक] (http://store.naszta.hu/main/example01.cpp)। – Naszta
TCHAR, या तो चार या wchar_t है तो एक
typedef basic_string<TCHAR> tstring;
यह ऐसा करने का एक तरीका है।
दूसरा char
पूरी तरह से छोड़ना है और बस std::wstring
का उपयोग करना है।
मेरा उत्तर देर हो गया है, मैं इसे स्वीकार करूंगा, लेकिन 'आलोक सेव' के जवाब और कुछ शोधों के साथ मुझे एक अच्छा तरीका मिला है! (नोट: मैं इस संस्करण एक बहुत का परीक्षण नहीं किया है, तो यह हर मामले में काम नहीं कर सकते, लेकिन से मैं क्या परीक्षण किया यह होना चाहिए):
TCHAR t = SomeFunctionReturningTCHAR();
std::string str;
#ifndef UNICODE
str = t;
#else
std::wstring wStr = t;
str = std::string(wStr.begin(), wStr.end());
#endif
std::cout << str << std::endl; //<-- should work!
यह केवल 7-बिट ASCII के लिए काम करता है, लेकिन अन्य पात्रों के लिए कचरा प्रिंट करता है। – palota
- 1. std :: string को basic_ostream में परिवर्तित करें?
- 2. TCHAR सरणी को चार सरणी में कनवर्ट करें
- 3. std :: string को const char * में कैसे परिवर्तित करें?
- 4. एक TCHAR सरणी
- 5. std :: string से lPCSTR को कैसे परिवर्तित करें?
- 6. QString से std :: string को कैसे परिवर्तित करें?
- 7. CString और :: std :: string :: std :: wstring को दूसरे में कैसे परिवर्तित करें?
- 8. std :: basic_string <TCHAR>
- 9. std :: string में एक const char * को कैसे स्टोर करें?
- 10. std :: string को पूर्णांक
- 11. सिस्टम :: स्ट्रिंग^को std :: string में कैसे चालू करें?
- 12. std :: string
- 13. एक शून्य :: वेक्टर <std :: string>
- 14. std :: string <std::string>
- 15. ArrayList को संरचना की एक सरणी में कैसे परिवर्तित करें?
- 16. std :: जोड़ी की एक क्रमबद्ध std :: सूची को कैसे परिवर्तित करें :: std :: map
- 17. सीधे एक std :: istream से std :: string
- 18. std :: string
- 19. मैं एक TCHAR
- 20. आरसीपीपी :: CharacterVector को std :: string
- 21. utf16 ushort सरणी को utf8 std :: स्ट्रिंग में कैसे परिवर्तित करें?
- 22. एक सर सरणी को एक स्ट्रिंग सरणी में कैसे परिवर्तित करें?
- 23. पायथन में एक एसोसिएटिव सरणी को कैसे परिवर्तित करें?
- 24. एसटीडीआईएन सामग्री को एक सरणी में कैसे परिवर्तित करें?
- 25. एक आरजीबी छवि को numpy सरणी में कैसे परिवर्तित करें?
- 26. मैं std :: string को एक const में परिवर्तित करना चाहता हूं wchar_t *
- 27. सी # फ़ाइल को कैसे परिवर्तित करें। रीडलाइन में स्ट्रिंग सरणी?
- 28. कक्षा में शब्दकोश को कैसे परिवर्तित करें <string, string>?
- 29. std :: string :: असाइन() segfault
- 30. std :: string में वर्णों की संख्या कैसे प्राप्त करें?
आपको पता std :: स्ट्रिंग सिर्फ एक एसटीडी के लिए एक typedef है :: basic_string? –
और क्या आप एक विशेष रूप से यूनिकोड या एमबीसीएस टीसीएचएआर (यानी वास्तव में WCHAR या CHAR) को एक std :: string (i.e. char) में परिवर्तित करना चाहते हैं, या CHAR को स्ट्रिंग और WCHAR को wstring में परिवर्तित करना चाहते हैं, या कुछ और? – Rup