প্রথমত, সামান্যতম কাজ করার জন্য আপনাকে উদ্দেশ্যমূলক-সি ++ ব্যবহার করতে হবে; আপনার সমস্ত *.m
ফাইলের নাম পরিবর্তন করা হয়েছে তা নিশ্চিত করার সবচেয়ে সহজ উপায়*.mm
এ পর্যন্ত সবচেয়ে ব্যবহারযোগ্য করে (অ-থামানো হয়েছে) একটি সি ++ পাবার ম্যানুয়াল উপায় std::string
একটি মধ্যে NSString
দিয়ে হল:
std::string param;
NSString* result = [NSString stringWithUTF8String:param.c_str()];
NSString* alternative = [[NSString alloc] initWithUTF8String:param.c_str()];
এটি বেশিরভাগ ক্ষেত্রেই কাজ করবে - এবং আপনি যদি নির্দিষ্ট এনকোডিং সনাক্তকরণ এবং রূপান্তর না করে থাকেন তবে ইউটিএফ -8 আপনাকে লাতিন-অক্ষর অক্ষর থাকার জন্য একটি ভাল ফলাফল দিতে চলেছে 'কেবলমাত্র কাজ'।
আপনি যদি একটি বড় অ্যাপ তৈরি করে থাকেন বা আপনি কেবল এতে কাজ করছেন না তবে আপনি সম্ভবত এমন কিছু চাইবেন যা প্রয়োগ করা সহজ।
কোকো-ডেভ মেইলিং তালিকা সংরক্ষণাগারগুলি থেকে অভিযোজিত
@interface NSString (cppstring_additions)
+(NSString*) stringWithwstring:(const std::wstring&)string;
+(NSString*) stringWithstring:(const std::string&)string;
-(std::wstring) getwstring;
-(std::string) getstring;
@end
@implementation NSString (cppstring_additions)
#if TARGET_RT_BIG_ENDIAN
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32BE);
#else
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32LE);
#endif
+(NSString*) stringWithwstring:(const std::wstring&)ws
{
char* data = (char*)ws.data();
unsigned size = ws.size() * sizeof(wchar_t);
NSString* result = [[NSString alloc] initWithBytes:data length:size encoding:kEncoding_wchar_t];
return result;
}
+(NSString*) stringWithstring:(const std::string&)s
{
NSString* result = [[NSString alloc] initWithUTF8String:s.c_str()];
return result;
}
-(std::wstring) getwstring
{
NSData* asData = [self dataUsingEncoding:kEncoding_wchar_t];
return std::wstring((wchar_t*)[asData bytes], [asData length] / sizeof(wchar_t));
}
-(std::string) getstring
{
return [self UTF8String];
}
@end
সেই জায়গাটিতে (এবং যথাযথভাবে #import
সম্পাদিত) দিয়ে আপনি এখন করতে পারেন:
NSString* result = [NSString stringWithstring:param];
string convertedBack = [result getstring];
এবং একই জন্য std::wstring
, যা কাজের চেয়ে বেশি।