আমার একটি NSStringঅবজেক্ট রয়েছে এবং এটিকে রূপান্তর করতে চাই std::string।
আমি ওজেক্টিভ-সি ++ এ কীভাবে করব?
উত্তর:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
সম্পাদনা: কয়েক বছর পরে, আমাকে এই উত্তরটি প্রসারিত করুন। হিসাবে আইনসঙ্গতভাবে নির্দিষ্ট, আপনি সম্ভবত ব্যবহার করতে চাইবেন cStringUsingEncoding:সঙ্গে NSASCIIStringEncodingযদি আপনি ব্যবহার শেষ করতে যাচ্ছি std::string। আপনি সাধারণ সহ ইউটিএফ -8 ব্যবহার করতে পারেন std::stringsতবে মনে রাখবেন যে এগুলি বাইটগুলিতে এবং না অক্ষর বা এমনকি গ্রাফিমগুলিতে চালিত হয়। ভাল "শুরু" করার জন্য, এই প্রশ্ন এবং এর উত্তরটি দেখুন ।
আরও মনে রাখবেন, আপনার যদি এমন একটি স্ট্রিং থাকে যা ASCII হিসাবে উপস্থাপন করা যায় না তবে আপনি এটি এখনও একটিতে চান std::stringএবং আপনি সেখানে অ-এএসসিআইআই অক্ষর চান না, আপনি ক্ষতিকারক এনকোডযুক্ত ASCII সহ স্ট্রিংটির উপস্থাপনা dataUsingEncoding:allowLossyConversion:পেতে ব্যবহার করতে পারেন NSDataসামগ্রী এবং তারপরে আপনার এটিকে নিক্ষেপ করুনstd::string
-cStringUsingEncoding:পরিবর্তে ব্যবহার করতে হবে। :)
newগুলি উপর frowned হয়, এবং একটি std::shared_ptrবা std::unique_ptrপছন্দ করা উচিত।
ফিলজর্দান.ইউ- তে উল্লিখিত হিসাবে এটি এনএসএসস্ট্রিংও হতে পারে nil। সেক্ষেত্রে castালাই এভাবে করা উচিত:
// দ্রষ্টব্য: যদি foo শূন্য থাকে তবে এটি একটি খালি সি ++ স্ট্রিং তৈরি করবে
// ইউটিএফ 8 স্ট্রিং থেকে NULL পয়েন্টারটিকে ডিফারেন্স করার পরিবর্তে।
এটি আপনাকে এ জাতীয় রূপান্তর করতে পরিচালিত করবে:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);