जवाबों:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
संपादित करें: कुछ वर्षों के बाद, मुझे इस उत्तर पर विस्तार करने दें। के रूप में हक ने कहा, आप सबसे अधिक संभावना का उपयोग करना चाहेंगे cStringUsingEncoding:
के साथ NSASCIIStringEncoding
करता है, तो आप उपयोग कर खत्म करने जा रहे हैं std::string
। आप सामान्य के साथ UTF-8 का उपयोग कर सकते हैं std::strings
, लेकिन ध्यान रखें कि वे बाइट्स पर काम करते हैं और पात्रों या यहां तक कि अंगूर पर भी नहीं। एक अच्छी "शुरुआत" के लिए, इस प्रश्न और इसके उत्तर की जाँच करें ।
यह भी ध्यान दें, यदि आपके पास एक स्ट्रिंग है जिसे ASCII के रूप में प्रस्तुत नहीं किया जा सकता है, लेकिन आप अभी भी इसे चाहते हैं std::string
और आप गैर-ASCII वर्ण नहीं चाहते हैं, तो आप हानिरहित एन्कोडेड ASCII के साथ स्ट्रिंग का प्रतिनिधित्व dataUsingEncoding:allowLossyConversion:
प्राप्त करने के लिए उपयोग कर सकते हैं NSData
सामग्री, और फिर अपने पर फेंक दोstd::string
-cStringUsingEncoding:
इसके बजाय उपयोग करना होगा। :)
new
रों पर सिकोड़ी रहे हैं, और एक std::shared_ptr
या std::unique_ptr
प्राथमिकता दी जानी चाहिए।
जैसा कि दार्ज़र्डन पर उल्लेख किया गया था। यह भी हो सकता है कि NSString है nil
। ऐसे में कलाकारों को इस तरह किया जाना चाहिए:
// नोट: अगर फू शून्य है तो यह एक खाली C ++ स्ट्रिंग का उत्पादन करेगा
// इसके बजाय UTF8String से NULL पॉइंटर को डीफ़र करने के बजाय।
यह आपको इस तरह के रूपांतरण की ओर ले जाएगा:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);