Wie wchar_t in NSString konvertieren?

8

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!

    
User1234 13.10.2011, 11:14
quelle

3 Antworten

12

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:

%Vor%

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 '.
JeremyP 13.10.2011, 11:48
quelle
15

Mein Konverter für "char", "wchar_t", "NSString". Verwenden und genießen.

%Vor%     
user1351086 13.10.2012 18:38
quelle
4

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:

%Vor%

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: Ссылка

    
Totumus Maximus 13.10.2011 11:22
quelle

Tags und Links