atoi
द्विआधारी संख्याओं को संभाल नहीं करता है, यह सिर्फ उन्हें बड़ी दशमलव संख्या के रूप में व्याख्या करता है। आपकी समस्या यह है कि यह बहुत अधिक है और इसे दशमलव संख्या के रूप में व्याख्या करने के कारण एक पूर्णांक ओवरफ़्लो मिलता है।
समाधान stoi
, stol
या stoll
कि सी ++ 11 में string
को जोड़ा गया उपयोग करने के लिए किया जाएगा। उनकी तरह
int i = std::stoi("01000101", nullptr, 2);
- कॉल दिए गए मान परिवर्तित
int
मूल्य है।
- पहला तर्क
std::string
है जिसे आप कनवर्ट करना चाहते हैं।
- दूसरा
size_t *
है जहां यह पहले गैर अंकों के चरित्र की अनुक्रमणिका को सहेज लेगा।
- तीसरे एक
int
कि आधार है कि रूपांतरण के लिए ही किया जाएगा से मेल खाती है है ..
जानकारी के लिए
पर कार्यों its cppreference page को देखो।
ध्यान दें कि वहाँ भी लगभग एक ही नाम के साथ सी ++ 11 कार्यों के लिए पूर्व कर रहे हैं उदाहरण के रूप में,: strtol
सी ++ 11 stol
की तुलना में।
वे अलग-अलग अड्डों के लिए भी काम करते हैं, लेकिन वे उसी तरह से त्रुटि प्रबंधन नहीं करते हैं (वे विशेष रूप से कमी करते हैं जब दिए गए स्ट्रिंग पर कोई रूपांतरण नहीं किया जा सकता है जैसे कि "हैलो" को स्ट्रिंग में परिवर्तित करने का प्रयास करना) और आपको शायद C++ 11 संस्करण पसंद करना चाहिए।
मेरी बात करने के लिए, "हैलो" गुजर दोनों strtol
के लिए और सी ++ 11 stol
तक ले जाएगा:
strtol
रिटर्न 0
और आप त्रुटि के रूप में पहचान करने के लिए किसी भी तरह से नहीं देता है,
stol
सी ++ 11 से std::invalid_argument
फेंकता है और इंगित करता है कि कुछ गलत है।
पूर्णांक के रूप में "हैलो" जैसे कुछ गलत तरीके से व्याख्या करना बग का कारण बन सकता है और मेरी राय में से बचा जाना चाहिए।
लेकिन पूर्णता के लिए its cppreference page पर भी एक लिंक है।
स्रोत
2014-05-11 19:35:52
* बाइनरी * की एक स्ट्रिंग से आपका क्या मतलब है? '10001" जैसी कुछ है जिसे आपको '17' में बदलने की आवश्यकता है? – NPE
हां, मैंने इसे थोड़ा और स्पष्ट बनाने के लिए संपादित किया है – SkippyNBS
'atoi() 'इनपुट स्ट्रिंग को दशमलव के रूप में मानता है; आप 'strtol()' (या इसके रिश्तेदारों में से एक) का उपयोग बाइनरी पाने के आधार के रूप में '2' के साथ कर सकते हैं। –