将UInt8数组转换为String

时间:2015-07-23 01:28:33

标签: swift

我使用AES(CrytoSwift)进行了解密,并留下了一个UInt8数组。将UInt8数组转换为appripriate字符串的最佳方法是什么?转换数组只会返回一个看起来与数组完全相同的字符串。 (在Java中完成时,将Byte数组转换为String时会获得新的READABLE字符串)。

3 个答案:

答案 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))
        }
    }
}