Ich habe wchar_t Puffer [100]. Manchmal ist es für Unicode-Buchstaben erforderlich, manchmal nicht.
Ich muss es in NSString konvertieren.
Ich verwende NSString *str = [NSString string:(char *)buffer];
, um es zu konvertieren.
Wenn ich versuche, meinen NSString zu NSLoggen, wird manchmal das richtige Ergebnis erzielt, aber manchmal nicht.
Habe ich etwas verpasst?
Danke!
Alles ist wie Totumus Maximus gesagt hat, aber zusätzlich müssen Sie wissen, wie die Zeichen in Ihrem Puffer codiert sind. Da wchar_t
32 Bits hat, haben Sie wahrscheinlich eine 32-Bit-Kodierung, von der UTF32-LE am wahrscheinlichsten ist. Was Sie tun möchten, um Ihren NSString zu erhalten, ist:
wo:
numberOfCharsInBuffer
ist die Anzahl von wchar_t
s im Puffer, den Sie dekodieren möchten. Die obige Methode geht nicht davon aus, dass die Zeichenfolge null terminiert ist, und versucht, Nullwerte in den NSString einzufügen, wenn sie vor der von Ihnen angegebenen Länge erscheinen (beachten Sie, dass wchar_t "null" einen 32-Bit-Wert bedeutet, der null ist). someEncoding
ist die encoding wird von der Zeichenfolge im Puffer verwendet. Versuchen Sie NSUTF32StringEncoding
, NSUTF32LittleEndianStringEncoding ,
NSUTF32BigEndianStringEncoding '. Mein Konverter für "char", "wchar_t", "NSString". Verwenden und genießen.
%Vor%Vielleicht wird dies die Dinge klären.
C89 führte einen neuen ganzzahligen Typ ein, wchar_t
. Dies ist ähnlich wie ein Char, aber typischerweise "breiter". Auf vielen Systemen, einschließlich Windows, ist ein wchar_t
16 Bits. Dies ist typisch für Systeme, die ihre Unicode-Unterstützung mit früheren Versionen des Unicode-Standards implementiert haben, der ursprünglich weniger als 65.535 Zeichen definiert hat. Unicode wurde später erweitert, um Zeichensätze für historische und spezielle Zwecke zu unterstützen. Auf einigen Systemen, einschließlich Mac OS X und iOS, ist der Typ wchar_t
32 Bit groß. Dies ist oft schlecht dokumentiert, aber Sie können einen einfachen Test wie folgt verwenden:
Auf einem Mac oder iPhone wird "wchar_t ist 32 Bit breit" gedruckt. Darüber hinaus ist wchar_t
ein typedef für einen anderen Integer-Typ in C. In% C ++ ist wchar_t
ein eingebauter Integer-Typ. In der Praxis bedeutet dies, dass Sie bei Verwendung von Wide-Zeichen in C # einschließen müssen.
Hinweis: Ссылка
Tags und Links objective-c macos cocoa