2009-06-14 13 views
36

में कनवर्ट करें CString ऑब्जेक्ट को एमएफसी में पूर्णांक में कैसे परिवर्तित करें।एमएफसी सीएसटींग को पूर्णांक

CString s = "123"; 
int x = atoi(s); 

हालांकि, इस मामले में जहां स्ट्रिंग एक मान्य पूर्णांक शामिल नहीं है, ऐसी स्थिति में आप की जाँच करनी चाहिए साथ अच्छी तरह से निपटने के नहीं करता है:

उत्तर

29

सरल दृष्टिकोण atoi() समारोह stdlib.h में पाया उपयोग करने के लिए है strtol() समारोह:

CString s = "12zzz"; // bad integer 
char * p; 
int x = strtol (s, & p, 10); 
if (* p != 0) { 
    // s does not contain an integer 
} 
+4

यहां ठोकर खाई गई क्योंकि संकलक कहता है: "atoi: CString को const char * में परिवर्तित नहीं कर सकता"; तो मैंने पाया कि आपका जवाब काम नहीं करता है अगर यह एक यूनिकोड प्रोजेक्ट है, तो यूटी – Zac

+0

त्रुटि सी 2664: 'atoi' द्वारा इंगित किया गया है: 'CSTring' से 'const char char' 'पैरामीटर 1 को कन्वर्ट नहीं कर सकता है' – maamaa

14
CString s; 
int i; 
i = _wtoi(s); // if you use wide charater formats 
i = _atoi(s); // otherwise 
+1

आपको करने की ज़रूरत है इस कोड के लिए उन कार्यों के वापसी मूल्यों के साथ कुछ उपयोगी होना चाहिए। –

+0

हां, आप निश्चित रूप से सही हैं। – PaV

7

आप भी अच्छे पुराने sscanf उपयोग कर सकते हैं।

CString s; 
int i; 
int j = _stscanf(s, _T("%d"), &i); 
if (j != 1) 
{ 
    // tranfer didn't work 
} 
33

आप TCHAR.H दिनचर्या (परोक्ष या स्पष्ट रूप से) का उपयोग कर रहे हैं, तो इतना है कि यह दोनों यूनिकोड और एएनएसआई संकलन के लिए संकलित आप, _ttoi() फ़ंक्शन का उपयोग सुनिश्चित करें।

अधिक विवरण: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx

-2

आप (क्योंकि रूपांतरण हमेशा संभव नहीं है आज़माएं/कैच खंड में) सी atoi समारोह का उपयोग कर सकते लेकिन वहाँ यह बेहतर करने के लिए MFC कक्षाओं में कुछ भी नहीं है।

+0

स्टैक ओवरफ्लो में आपका स्वागत है। आप सही हो सकते हैं, लेकिन ऐसा लगता है कि [200 9 में पहले से ही उल्लेख किया गया था] (http://stackoverflow.com/a/992775/104223)। (जब आपके पास पर्याप्त प्रतिष्ठा है, तो आप मौजूदा उत्तरों पर टिप्पणियां जोड़ सकते हैं) – Leigh

+3

atoi अपवाद नहीं बढ़ाता –

2

स्वीकृत उत्तर के साथ समस्या यह है कि यह विफलता को संकेत नहीं दे सकता है। strtol (लंबे समय तक चल रहा है) जो कर सकते हैं। यह एक बड़े परिवार का हिस्सा है: wcstol (विस्तृत वर्ण स्ट्रिंग टू लांग, उदाहरण के लिए यूनिकोड), strtoull (लंबे समय तक लंबे समय तक, 64 बिट्स +), wcstoull, strtof (फ़्लोट करने के लिए) और wcstof

6

_ttoi फ़ंक्शन CString को पूर्णांक में परिवर्तित कर सकता है, दोनों विस्तृत चार और ansi char काम कर सकते हैं। नीचे दिए गए विवरण है:

CString str = _T("123"); 
int i = _ttoi(str); 
0

MSDN में परिभाषित करें: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx

int atoi(
    const char *str 
); 
int _wtoi(
    const wchar_t *str 
); 
int _atoi_l(
    const char *str, 
    _locale_t locale 
); 
int _wtoi_l(
    const wchar_t *str, 
    _locale_t locale 
); 

cstring wchar_t स्ट्रिंग है। इसलिए, यदि आप int करने के लिए cstring परिवर्तित करना चाहते हैं, आप का उपयोग कर सकते हैं:

CString s; 
int test = _wtoi(s) 
+0

'सीएसटीआरई'' _UNICODE' और '_MBCS' प्रीप्रोसेसर प्रतीकों पर निर्भर करता है। यह एक यूटीएफ -16 एन्कोडेड यूनिकोड स्ट्रिंग, एक डीबीसीएस वर्ण स्ट्रिंग या एएससीआईआईआई स्ट्रिंग स्टोर कर सकता है। यह सुझाव देते हुए कि यह हमेशा एक यूनिकोड स्ट्रिंग होगा, क्षमा करें, क्षमा करें। – IInspectable

0

विहित समाधान रूपांतरण के लिए सी ++ स्टैंडर्ड लाइब्रेरी का प्रयोग है। वांछित रिटर्न प्रकार के आधार पर, निम्नलिखित रूपांतरण फ़ंक्शन उपलब्ध हैं: std::stoi, std::stol, or std::stoll (या उनके हस्ताक्षरित समकक्ष std::stoul, std::stoull)।

कार्यान्वयन काफी सीधे आगे है:

int ToInt(const CString& str) { 
    return std::stoi({ str.GetString(), static_cast<size_t>(str.GetLength()) }); 
} 

long ToLong(const CString& str) { 
    return std::stol({ str.GetString(), static_cast<size_t>(str.GetLength()) }); 
} 

long long ToLongLong(const CString& str) { 
    return std::stoll({ str.GetString(), static_cast<size_t>(str.GetLength()) }); 
} 

unsigned long ToULong(const CString& str) { 
    return std::stoul({ str.GetString(), static_cast<size_t>(str.GetLength()) }); 
} 

unsigned long long ToULongLong(const CString& str) { 
    return std::stoull({ str.GetString(), static_cast<size_t>(str.GetLength()) }); 
} 

इन कार्यान्वयन के सभी अपवादों के माध्यम से त्रुटि रिपोर्ट (std::invalid_argument अगर कोई रूपांतरण किया जा सकता है, std::out_of_range अगर परिवर्तित मूल्य परिणाम प्रकार की सीमा से बाहर गिर जाएगा)। अस्थायी std::[w]string का निर्माण भी फेंक सकता है।

कार्यान्वयन यूनिकोड के साथ-साथ एमबीसीएस परियोजनाओं दोनों के लिए भी उपयोग किया जा सकता है।

1
CString s="143"; 
int x=atoi(s); 

या

CString s=_T("143"); 
int x=_toti(s); 

atoi काम करेंगे, अगर आप int को CString परिवर्तित करना चाहते हैं।

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