2014-04-19 5 views
9

में कनवर्ट करना मुझे लगता है कि यह बहुत आसान है लेकिन मैं इसे काम नहीं कर सकता।एक std :: wstring को int

मैं बस एक intd :: wstring को int में बदलने की कोशिश कर रहा हूं।

मैंने अब तक दो विधियों का प्रयास किया है।

int ConvertedInteger = atoi(OrigWString.c_str()); 

हालांकि, कुलपति ++ 2013 मुझसे कहता है:

पहले "atoi" के साथ "सी" विधि का उपयोग करें ताकि तरह है

त्रुटि, प्रकार के तर्क "स्थिरांक wchar_t *" प्रकार के पैरामीटर के साथ "स्थिरांक char_t *"

असंगत है तो मेरी दूसरी विधि गूगल खोज के अनुसार इस का उपयोग करने के, था:

std::wistringstream win(L"10"); 
      int ConvertedInteger; 
      if (win >> ConvertedInteger && win.eof()) 
      { 
       // The eof ensures all stream was processed and 
       // prevents acccepting "10abc" as valid ints. 
      }  

हालांकि कुलपति ++ 2013 मुझसे कहता है यह:

"त्रुटि: अधूरा प्रकार की अनुमति नहीं है।"

मैं यहाँ क्या गलत कर रहा हूं?

क्या std :: wstring को int और back में परिवर्तित करने का कोई बेहतर तरीका है?

आपके समय के लिए धन्यवाद।

+1

क्या आपने 'शामिल किया था? स्ट्रिंगस्ट्रीम के साथ आपका कोड काम करना चाहिए। – Praetorian

+0

कृपया 'int ConvertedInteger = _wtoi (OrigWString) का उपयोग करके स्ट्रिंग को कन्वर्ट करने का प्रयास करें; ' –

+0

आप स्ट्रिंग से हमेशा' std :: string' बना सकते हैं और उस पर 'std :: stoi' का उपयोग कर सकते हैं। यदि संख्या काफी बड़ी है तो आपको स्मृति आवंटन हो सकता है, लेकिन मुझे संदेह है कि यह स्ट्रिंगस्ट्रीम का उपयोग करने से भी बदतर है। –

उत्तर

25

सी एपीआई (एटोई), या गैर पोर्टेबल एपीआई (_wtoi), या जटिल समाधान (wstringstream) पर वापस जाने की आवश्यकता नहीं है क्योंकि इस तरह के रूपांतरण करने के लिए पहले से ही सरल, मानक एपीआई हैं: std :: stoi और std :: to_wstring

#include <string> 

std::wstring ws = L"456"; 
int i = std::stoi(ws); // convert to int 
std::wstring ws2 = std::to_wstring(i); // and back to wstring 
+2

'sto *()' फ़ंक्शंस परिवार का उपयोग करने से बचने का एक कारण यह है कि वे सभी अपवाद फेंक देते हैं। 'एटीओ *() 'मत करो –

-2

आप wstring.h से उपलब्ध एपीआई का उपयोग कर सकते हैं।

WString से int को बदलने के लिए int ConvertedInteger = _wtoi(OrigWString); को आजमाएं।

संदर्भ उपयोग के लिए msdn.microsoft.com/en-us/library/aa273408(v=vs.60).aspx।

+0

के लिए आवश्यक है * स्ट्रीम का मतलब स्ट्रिंग मान * देता है? ओपी का [कोड काम करता है] (http://coliru.stacked-crooked.com/a/c17228c41560b000), त्रुटि कहीं और है। – Praetorian

+0

@Praetorian मेरा मतलब है कि जब हम स्ट्रीम ऑब्जेक्ट से डेटा लिखते/पढ़ते हैं तो यह ओपी मामले में स्ट्रिंग मानों पर काम करता है, यह –

+0

wstring है ओपी 'wistringstream' का उपयोग कर रहा है जो' wchar_t', 'char' से संबंधित नहीं है। एक बार फिर, उसका कोड काम करता है, मेरी पिछली टिप्पणी में लिंक देखें। अपूर्ण प्रकार का उपयोग करने के बारे में त्रुटि संदेश का अर्थ है कि वह कुछ हेडर फ़ाइल शामिल करना भूल गया। – Praetorian

संबंधित मुद्दे