আমার একটি 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]);