सबसे पहले, आप इसे मामूली में काम करने के लिए Objective-C ++ का उपयोग कर रहे हैं; यह सुनिश्चित करने का सबसे आसान तरीका है कि आपकी सभी *.m
फ़ाइलों का नाम बदल दिया जाए*.mm
अब तक का सबसे उपयोगी तक (गैर हटा दिया गया) एक सी ++ होने का मैनुअल तरीका std::string
एक में NSString
साथ है:
std::string param; // <-- input
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
, जो काम से ज्यादा है।