我使用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))
}
}
}