2009-09-30 18 views
11

में परिवर्तित करने के लिए कैसे कोई तरीका है जो स्ट्रिंग को बिना हस्ताक्षर किए int में परिवर्तित करता है? _ultoa मौजूद है लेकिन vise verse संस्करण नहीं मिला ...ascii को unsigned int

उत्तर

15

std::strtoul() वह है। और फिर फिर पुराने हैं जैसे atoi()

+2

atoi हालांकि हस्ताक्षर नहीं किया गया है, है ना? विंडोज सीआरटी में, यह ओवरफ्लो की स्थिति में एक त्रुटि (ERANGE) लौटाएगा। – Cheeso

+0

चीसो, हाँ, जो मैं "i" द्वारा बता सकता हूं, यह int है ;-) –

11

बूस्ट lexical_cast प्रदान करता है।

#include <boost/lexical_cast.hpp> 
[...] 
unsigned int x = boost::lexical_cast<unsigned int>(strVal); 

वैकल्पिक रूप से, आप एक stringstream उपयोग कर सकते हैं (जो मूल रूप से है क्या lexical_cast कवर के तहत करता है):

#include <sstream> 
[...] 
std::stringstream s(strVal); 
unsigned int x; 
s >> x; 
+1

और यदि आप गैर-दशमलव व्याख्या चाहते हैं, तो यह भी देखें: http://stackoverflow.com/questions/1070497/c-convert- हेक्स-स्ट्रिंग-टू-हस्ताक्षरित-पूर्णांक – Martin

+0

क्या मैं एकमात्र व्यक्ति हूं जो धारा सम्मिलन को प्यार करता है, लेकिन धारा निष्कर्षण से नफरत करता है? मैं फ़ंक्शंस का उपयोग करता हूं (जैसे कि यह बढ़ावा देता है, हालांकि ईमानदार होने के बावजूद मैं अब भी बिना किसी सोच के एटीई का उपयोग करता हूं) हर बार। – Steve314

+0

हाँ, स्ट्रीम निष्कर्षण बहुत बदसूरत है, खासकर जब से आप इसके साथ स्थिरांक शुरू नहीं कर सकते हैं। हालांकि यह काफी अधिक शक्तिशाली है, क्योंकि आप अपने आधार को बदलने के लिए मैनिपुलेटर्स का उपयोग कर सकते हैं, आदि – Martin

-3

कैसे के बारे में int atoi (const char * str)?

string s("123"); 
unsigned u = (unsigned)atoi(s.c_str()); 
+5

यह बिल्कुल अच्छा सुझाव नहीं है। उन्होंने विशेष रूप से "हस्ताक्षरित int" के लिए कहा है और "_ultoa" जैसी चीजों का उल्लेख किया है। पोस्टर atoi(), atol(), आदि के बारे में जानता है। ये फ़ंक्शंस सभी हस्ताक्षरित हैं और प्रतीक को पहचानते हैं, ओवरफ्लो को संभाल सकते हैं, इत्यादि सही जवाब स्ट्रेटोल जैसे कार्यों का उपयोग करना है। – Armentage

1

sscanf जो भी आप चाहते हैं वह करेंगे।

char* myString = "123"; // Declare a string (c-style) 
unsigned int myNumber; // a number, where the answer will go. 

sscanf(myString, "%u", &myNumber); // Parse the String into the Number 

printf("The number I got was %u\n", myNumber); // Show the number, hopefully 123 
+0

मैंने स्कैनफ परिवार से भी घृणा की। सी ने कभी ऐसा नहीं किया जो मैं चाहता था, और ज्यादातर बार यह एक बग का कारण बनता था। यह ठीक है अगर आप जानते हैं कि स्ट्रिंग आपकी आवश्यकताओं से मेल खाती है - यदि आपने इसे पहले ही चेक कर लिया है या इसे अन्य कोड के साथ निकाला है - लेकिन उस स्थिति में, केवल एटोई या जो कुछ भी उपयोग न करें? स्कैनफ़-फ़ैमिली फ़ंक्शन का उपयोग करने वाला कोई भी व्यक्ति - ठीक है, कुछ अपराध हैं जहां कोई दंड कभी भी कठोर नहीं हो सकता है ;-) – Steve314

+0

यह होना चाहिए "कोई भी C++ में स्कैनफ़-फ़ैमिली फ़ंक्शन का उपयोग कर रहा है ..." – Steve314

0

यह काम करता है अगर आप के माध्यम से _atoi64

अहस्ताक्षरित लंबे एल = _atoi64 (एसटीआर) जाओ,

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