Erstens, haben Sie Objective-C++ zu verwenden hierfür im Geringsten zu arbeiten; einfachste Weg, um sicherzustellen, ist es, alle *.mm
Bei weitem die meisten verwendbar (nicht weiterentwickelt) manuelle Art und Weise eine C++ zu bekommen std::string
in eine NSString
auf Ihre *.m
Dateien umbenennen mit:
std::string param; // <-- input
NSString* result = [NSString stringWithUTF8String:param.c_str()];
NSString* alternative = [[NSString alloc] initWithUTF8String:param.c_str()];
Dies funktioniert In den meisten Fällen - und wenn Sie keine spezielle Codierungserkennung und -konvertierung durchführen, wird UTF-8 Ihnen ein gutes Ergebnis liefern, wenn nicht-lateinische Zeichen "einfach funktionieren".
Wenn Sie eine größere App erstellen oder Sie nicht die einzige sind, die daran arbeitet, werden Sie wahrscheinlich etwas benötigen, das einfacher anzuwenden ist.
von cocoa-dev mailing list archives
@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
eingerichtet, dass mit in-Place (und entsprechend #import
ed) Sie können jetzt:
NSString* result = [NSString stringWithstring:param];
string convertedBack = [result getstring];
Und das gleiche gilt für std::wstring
, die mehr als praktisch.
Es ist ein Tippfehler sein muss, aber du verpasst '@' für Stringliteral in 'NSString * realm = "Hollywood";' Linie. – Vladimir
In meiner Bearbeitung behoben. –