2015-07-23 61 views
8

Tôi đã giải mã bằng AES (CrytoSwift) và sáng trái với mảng UInt8. Cách tiếp cận tốt nhất để bí mật mảng UInt8 thành chuỗi ứng dụng là gì? Việc đúc mảng chỉ trả về một chuỗi trông giống hệt mảng đó. (Khi thực hiện trong Java, một chuỗi READABLE mới thu được khi đúc mảng Byte thành String).Chuyển đổi UInt8 Array thành String

Trả lời

4

Tôi không biết gì về CryptoSwift. Nhưng tôi có thể đọc các README:

Để tiện cho bạn CryptoSwift cung cấp hai chức năng để dễ dàng chuyển đổi mảng byte để NSData và cách khác xung quanh:

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

Vì vậy, tôi đoán sẽ là: gọi NSData.withBytes để có được một NSData. Bây giờ bạn có thể gọi NSString(data:encoding:) để nhận chuỗi.

10

Tôi không chắc chắn nếu điều này là mới để Swift 2, nhưng ít nhất các công việc sau cho tôi:

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

Ngoài ra, nếu mảng được định dạng như là một chuỗi C (trailing 0), những công việc:

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

tôi đã thử đề xuất ở trên nhưng nó luôn xuất hiện dưới dạng nil. Tui bỏ lỡ điều gì vậy? – jaytrixz

+0

@jaytrixz Sao chép _first hai dòng_ (chỉ) trực tiếp vào sân chơi Swift hoạt động tốt cho tôi. Hai dòng cuối cùng không hoạt động cho mảng ví dụ, bởi vì (như đã đề cập trong câu trả lời), nó cần phải được kết thúc bằng NUL (tức là, một chuỗi C). Thay đổi nội dung của mảng thành '[49, 50, 51, 0]' làm cho chúng hoạt động. – Arkku

0

Extensions cho phép bạn dễ dàng thay đổi khuôn khổ để phù hợp với nhu cầu của bạn, về cơ bản việc xây dựng phiên bản của riêng bạn của Swift (phần yêu thích của tôi, tôi yêu để tùy chỉnh). Hãy thử một trong này ra, đặt ở phần cuối của bộ điều khiển tầm nhìn của bạn và gọi điện trong 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 Hãy thử điều này:

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

Đây là chuỗi xuất

Các vấn đề liên quan