转换UInt8数组为字符串



我使用AES (CrytoSwift)解密,并留下UInt8数组。把UInt8数组转换成合适的字符串的最好方法是什么?对数组进行强制转换只会返回一个与数组完全相同的字符串。(在Java中,当将Byte array转换为string时,将获得一个新的可读字符串)。

我不确定这对Swift 2来说是不是新的,但至少下面的工作对我来说是有效的:

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

此外,如果数组被格式化为C字符串(末尾为0),则可以:

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

我对CryptoSwift一无所知。但是我可以读取README:

为了方便您,CryptoSwift提供了两个函数来轻松地将字节数组转换为NSData和其他方式:

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

所以我的猜测是:调用NSData.withBytes来获取NSData。现在可以调用NSString(data:encoding:)来获取字符串

SWIFT 3.1试试这个:

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

字符串输出

扩展允许您轻松修改框架以满足您的需求,本质上是构建您自己版本的Swift(我最喜欢的部分,我喜欢自定义)。试试这个,放在视图控制器的末尾然后调用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))
        }
    }
}

最新更新