Wie verwenden Sie NULL-Zeichen mit NSString?
In PHP, die ich anrufen kann base64_encode("\x00". $username. "\x00". $password)
und die "\x00"
repräsentiert ein NULL-Zeichen.
Nun in Objective-C, ich habe eine Funktion, die wandelt NSData zu base64-codierte NSString erstellt von DaveDribin.
Wie erstelle ich Daten aus einer Zeichenkette, die NULL-Zeichen?
Diese scheint nicht zu funktionieren...
NSData * authCode = [[NSString stringWithFormat:@"%c%@%c%@", '\0', self.username, '\0', self.password] dataUsingEncoding:NSUTF8StringEncoding];
- beschreiben Sie bitte "funktioniert nicht"
- NSLog Ihrem string
- Warum hat Ihr string enthalten NUL-Zeichen? Das klingt verdächtig nach etwas, das sollte sein ein NSData, um mit zu beginnen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie diese:
Ausgabe:
Oder aus
NSString
:Können Sie sehen, die null-bytes am Anfang, in der zwischen username/Passwort und am Ende - aufgrund der
char[]
ist null-terminiert.[NSString string]
und mitinitWithBytes:length:
). Auch, Sie verwenden müssen, uminitWithBytes:length:encoding:
zu bauen.Ihre syntax korrekt ist. NSString einfach nicht behandeln
NULL
bytes gut. Ich finde keine Dokumentation darüber, aber NSString wird stillschweigend ignorieren%c
Formatbezeichner mit dem argument0
(und in diesem Sinne den Charakter Konstante'\0'
erweitert, um die ganze Zahl0
; das ist richtig). Es kann jedoch Griff\0
direkt eingebettet in ein NSString-literal.Finden Sie diesen code:
gibt:
(Beachten Sie, dass seit der
stringByEscapes
enthält tatsächlich dieNULL
bytes, beendet die NSLog-string-Anfang).Nicht ganz sicher, warum dies funktioniert, aber statt mit @"%c" als format-string mit '\0', versuchen Sie es mit @"%@" als format-string mit @"\0"
Könnten Sie auch versuchen, diese (getestet und funktioniert - übernommen von: http://www.cocoabuilder.com/archive/cocoa/174917-nul-characters-in-nsstring-cause-unexpected-results.html)
die Antwort von stefanB sieht aus wie eine richtige option. Stellt sich heraus, ich lief in die falsche info, dass es aussieht, wie \0 nicht funktioniert
Das war ok: