2008-11-19 22 views
9

मैं एक सी ++ डीएलएल (प्रबंधित नहीं) प्रोजेक्ट बनाने के लिए वीएस 2008 का उपयोग कर रहा हूं और मुझे एक char * को लंबे समय तक परिवर्तित करने की आवश्यकता है। क्या ऐसा करने का कोई आसान तरीका है?स्ट्रिंग को लंबे समय तक परिवर्तित करें

अग्रिम में :)

+0

यह इस सवाल का हर हफ्ते पॉप अप होता है या तो लगता है: - | –

उत्तर

5

धन्यवाद _atoi64. प्रयास करें यह char* लेता है और __int64 देता है।

+1

क्रेता सावधान रहें: atoi सुरक्षित प्रकार नहीं है और न ही यह किसी भी सीमा की जांच की पेशकश करता है! – Alan

+0

हाँ, _atoi64 शायद एक अच्छा विकल्प नहीं है। यदि आप .NET ढांचे का उपयोग कर रहे हैं, तो char * के बजाय स्ट्रिंग पर ToInt64 का उपयोग क्यों न करें। यदि नहीं, तो मुझे लगता है कि स्ट्रेटोल या यह इक्विव जाने का वर्तमान मानक तरीका है और एटोई से सुरक्षित है। –

+0

बूस्ट :: lexical_Cast <> –

15

सबसे आसान तरीका है

std::stringstream sstr(mystr); 
__int64 val; 
sstr >> val; 

आप इस के लिए एक 64-बिट आवेदन काम करने के लिए लक्षित करने के लिए आवश्यकता हो सकती है std :: stringstream उपयोग करने के लिए है (यह भी सबसे typesafe है ...)।

C++ FAQ

+0

आपको MSVC '__int64' भाषा एक्सटेंशन के बजाय' std :: int64_t' का उपयोग करना चाहिए। –

+0

मुझे नहीं लगता कि std :: int64_t वीसी ++ 2008 – Alan

+0

आह पर उपलब्ध है, आप सही हैं। मेरी गलती। –

7

आप को बढ़ावा देने का उपयोग कर रहे हैं, तो lexical_cast जाना मेरी राय में, जिस तरह से है।

long long ll = boost::lexical_cast<long long>(mystr) 
1

एक और विकल्प स्ट्रिंग लाइब्रेरी में पाया गया स्टॉल() का उपयोग कर रहा है। एक सी ++ स्ट्रिंग लेता है।

long long ll = std::stoll(mystr); 

Docs

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