2015-07-23 22 views
8

Ich habe mit AES (CrytoSwift) entschlüsselt und links mit einem UInt8-Array. Was ist der beste Ansatz, um das UInt8-Array in eine geeignete Zeichenfolge zu konvertieren? Durch das Umsetzen des Arrays wird nur eine Zeichenfolge zurückgegeben, die genau wie das Array aussieht. (Wenn Sie in Java arbeiten, wird eine neue READABLE-Zeichenfolge erhalten, wenn Byte-Array in String umgewandelt wird).Convert UInt8 Array in String

Antwort

4

Ich weiß nichts über CryptoSwift. Aber ich kann lesen Sie die README:

Ihren Cryptoswift zwei Funktion liefert auf einfache Weise konvertieren Array von Bytes zu NSData und umgekehrt:

let data = NSData.withBytes([0x01,0x02,0x03]) 
let bytes:[UInt8] = data.arrayOfBytes() 

So wäre meine Vermutung: call NSData.withBytes um eine NSData zu bekommen. Jetzt können Sie vermutlich NSString(data:encoding:) anrufen, um eine Zeichenfolge zu erhalten.

10

Ich bin nicht sicher, ob dies zu Swift neuen 2 ist, aber zumindest die folgenden Werke für mich:

let chars: [UInt8] = [ 49, 50, 51 ] 
var str = String(bytes: chars, encoding: NSUTF8StringEncoding) 

Darüber hinaus, wenn das Array als C-String formatiert wird (Hinter 0), diese Arbeit:

str = String.fromCString(UnsafePointer(chars)) // UTF-8 is implicit 
     // or: 
str = String(CString: UnsafePointer(chars), encoding: NSUTF8StringEncoding) 
+0

I versuchte den obigen Vorschlag, aber es kommt immer als Null heraus. Fehle ich etwas? – jaytrixz

+0

@jaytrixz Copypasting der _first zwei Zeilen_ (nur) direkt in Swift Spielplatz funktioniert gut für mich. Die letzten beiden Zeilen funktionieren nicht für das Beispielarray, da es (wie in der Antwort erwähnt) NUL-terminiert sein muss (d. H. Eine C-Zeichenfolge). Wenn Sie den Array-Inhalt auf "[49, 50, 51, 0]" ändern, funktionieren sie. – Arkku

0

Erweiterungen können Sie leicht den Rahmen ändern, um Ihre Bedürfnisse anzupassen, im wesentlichen Ihre eigene Version von Swift Gebäude (mein Lieblingsteil, ich liebe zu gestalten). Versuchen Sie dieses heraus, am Ende Ihrer View-Controller setzen und rufen Sie in viewDidLoad():

func stringToUInt8Extension() { 
    var cache : [UInt8] = [] 
    for byte : UInt8 in 97..<97+26 { 
     cache.append(byte) 
     print(byte) 
    } 
    print("The letters of the alphabet are \(String(cache))") 
} 

extension String { 
    init(_ bytes: [UInt8]) { 
     self.init() 
     for b in bytes { 
      self.append(UnicodeScalar(b)) 
     } 
    } 
} 
3

SWIFT 3.1 Versuchen Sie folgendes:

let decData = NSData(bytes: enc, length: Int(enc.count)) 
let base64String = decData.base64EncodedString(options: .lineLength64Characters) 

Dies ist String Ausgabe