2015-07-23 28 views
8

AES (CrytoSwift) kullanarak şifresini çözdüm ve bir UInt8 dizisiyle kaldım. UInt8 dizisini bir uygulama dizesine dönüştürmek için en iyi yaklaşım nedir? Diziyi yayınlamak, diziye tam olarak benzeyen bir dize geri verir. (Java'da yapıldığında, Byte dizisini String'e gönderirken yeni bir READABLE dizesi elde edilir).UInt8 Dizisini Dize Dönüştür

cevap

4

CryptoSwift hakkında hiçbir şey bilmiyorum.

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

Yani benim tahminim olurdu: NSData.withBytes çağrı CryptoSwift kolayca NSData ve çevresinde başka bir şekilde bayt dizisi dönüştürmek için iki fonksiyonu sağlar Size kolaylık sağlamak için

: Ama README okuyabilir NSData almak için. Artık bir ipucu almak için muhtemelen NSString(data:encoding:)'u arayabilirsiniz.

10

Bu Swift 2 yeni olup olmadığından emin değilim, ama en azından benim için şu işleri: Ayrıca

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

, array (0 sondaki) C dize olarak biçimlendirilmiş ise, bu eser:

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

I Yukarıdaki öneriyi denedi ama her zaman sıfır olarak çıkıyor. Bir şey mi eksik? – jaytrixz

+0

@jaytrixz Hemen hemen iki Swift_confini (sadece) Swift oyun alanına kopyalamak benim için iyi çalışıyor. Son iki satır örnek dizisi için çalışmaz, çünkü (cevapta belirtildiği gibi), NUL sonlandırmalı (yani, bir C dizgisi) gerekir. Dizi içeriklerini '[49, 50, 51, 0]' olarak değiştirmek onları çalışır kılar. – Arkku

0

Uzantıları kolayca esasen Swift kendi versiyonunu bina, ihtiyaçlarınıza göre çerçeveyi değiştirmesine izin (benim favori parçası, ben özelleştirmek için seviyorum).) (Görünümünüzü denetleyicisi sonunda koymak, bu bir deneyin ve viewDidLoad çağrı:

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 deneyin:

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

Bu dize çıkış

İlgili konular