सी ++ में किसी स्ट्रिंग से हस्ताक्षरित लंबे समय तक पुनर्प्राप्त करने का सबसे सुरक्षित और सर्वोत्तम तरीका क्या है?आप स्ट्रिंग से एक हस्ताक्षरित लंबे समय तक कैसे प्राप्त करते हैं?
मुझे कई संभावित तरीकों के बारे में पता है।
सबसे पहले, एटोल से लिया गया एक हस्ताक्षरित लंबा रूपांतरित करना।
char *myStr; // Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));
इसके साथ स्पष्ट समस्या यह है कि, क्या होता है जब मेरे एसआरटी में संग्रहीत मूल्य एक हस्ताक्षरित लंबे समय से बड़ा हो सकता है? एटोल पुनर्प्राप्त क्या करता है?
अगली संभावना स्ट्रेटल का उपयोग करना है।
char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);
हालांकि, यह मेरी आवश्यकताओं के लिए थोड़ा अधिक जटिल है। मैं एक साधारण फ़ंक्शन, स्ट्रिंग इन, हस्ताक्षरित लम्बी बेस 10 आउट करना चाहता हूं। इसके अलावा, त्रुटि प्रबंधन वांछित होने के लिए बहुत छोड़ देता है।
मुझे मिली अंतिम संभावना एसएसकेएनएफ का उपयोग करना है।
char *myStr; // Initalized to some value somehow.
unsigned long n = 0;
if(sscanf(myStr, "%lu", n) != 1) {
//do some error handling
}
फिर से, त्रुटि प्रबंधन वांछित होने के लिए बहुत अधिक छोड़ देता है, और मैं जितना चाहूं उससे थोड़ा अधिक जटिल हूं।
शेष स्पष्ट विकल्प मेरी पिछली संभावनाओं में से किसी एक के चारों ओर एक रैपर लिखना है या कुछ चीज जो स्ट्रिंग के माध्यम से चक्र बनाती है और जब तक यह ULONG_MAX तक पहुंच जाती है तब तक प्रत्येक अंक को मैन्युअल रूप से परिवर्तित नहीं करती है।
मेरा सवाल यह है कि, मेरे Google-fu अन्य विकल्प क्या ढूंढने में विफल रहे हैं? सी ++ एसडीडी लाइब्रेरी में कोई चीज जो एक स्ट्रिंग को एक हस्ताक्षरित लंबे समय तक परिवर्तित कर देगी और विफलता पर अपवाद फेंक देगी?
मेरी माफी माँगती है कि यह एक डुप्ली है, लेकिन मुझे कोई प्रश्न नहीं मिला जो वास्तव में मेरा मिलान करता था।
'एटोल':" यदि सही मूल्य प्रतिनिधित्व मूल्यों की सीमा से बाहर है, तो LONG_MAX या LONG_MIN वापस आ गया है। " http://www.cplusplus.com/reference/clibrary/cstdlib/atol/ –
युगल प्रश्न, मुझे यकीन नहीं है कि वे डुप्लीकेट हैं या नहीं: (1) http://stackoverflow.com/questions/1243428/convert- स्ट्रिंग-टू-इंट-टू-बूल-असफल-इन-सी/1243435 (2) http://stackoverflow.com/questions/1435253/c-syntax-question-if-var-type-int/1435268 – GManNickG
मैं नहीं करता समझ में नहीं आता कि आपके पास स्ट्रेटल के खिलाफ क्या है। यह इसके लिए एकदम सही काम है। आधार के लिए 0 पास करें और यह आपकी सी लाइब्रेरी समझने वाले किसी भी बेस उपसर्ग स्ट्रिंग के साथ संख्याओं को परिवर्तित करेगा, जैसे "0x"। –