我使用AES(CrytoSwift)进行了解密,并留下了一个UInt8数组。将UInt8数组转换为appripriate字符串的最佳方法是什么?转换数组只会返回一个看起来与数组完全相同的字符串。 (在Java中完成时,将Byte数组转换为String时会获得新的READABLE字符串)。
答案 0 :(得分:11)
我不确定这对Swift 2是否是新手,但至少以下内容对我有用:
html, body {
margin: 0;
padding: 0;
width: 100%;
}
.container {
margin: 0;
padding: 0;
}
.center.navbar .nav,
.center.navbar .nav > li {
float:none;
display:inline-block;
*display:inline; /* ie7 fix */
*zoom:1; /* hasLayout ie7 trigger */
vertical-align: top;
}
.center .navbar-inner {
text-align: center;
}
此外,如果数组格式化为C字符串(尾随0),则这些工作:
let chars: [UInt8] = [ 49, 50, 51 ]
var str = String(bytes: chars, encoding: NSUTF8StringEncoding)
答案 1 :(得分:4)
我对CryptoSwift一无所知。但我可以阅读README:
为了您的方便,CryptoSwift提供了两个功能,可以轻松地将字节数组转换为NSData和其他方式:
let data = NSData.withBytes([0x01,0x02,0x03]) let bytes:[UInt8] = data.arrayOfBytes()
所以我的猜测是:调用NSData.withBytes
来获取NSData。现在你可以调用NSString(data:encoding:)
来获取字符串。
答案 2 :(得分:0)
扩展程序允许您轻松修改框架以满足您的需求,基本上构建您自己的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))
}
}
}