2015-11-07 39 views
1

我是新的swift。我有这个字节:字节转换为字符串swift(或swift2)

Bytes: [11, 143, 102, 88, 132, 238, 0, 156, 100, 166, 72, 98, 226, 109, 51, 196, 124, 124, 207, 252, 204, 129, 233, 209, 112, 127, 66, 177, 37, 141, 169, 158, 122, 74, 215, 103, 13, 128, 74, 81, 221, 46, 219, 145, 107, 131, 90, 246, 37, 212, 91, 237, 32, 138, 74, 147, 238, 40, 182, 158, 12, 124, 197, 17, 92, 24, 184, 44, 150, 127, 147, 161, 175, 186, 227, 4, 248, 44, 21, 83, 0]

,我用这个代码:

let dencryptedBytes: [UInt8] = try! AES(key: UrlManager.CONNECTION_KEY, iv:UrlManager.CONNECTION_IV, blockMode: .CBC).encrypt(bytes) 

,并导致这样的:

Decoded Bytes: [157, 29, 111, 190, 188, 31, 233, 140, 152, 67, 196, 83, 214, 238, 232, 184, 101, 149, 45, 184, 155, 85, 184, 69, 155, 173, 196, 145, 123, 54, 238, 243, 34, 178, 190, 129, 106, 11, 26, 147, 19, 207, 204, 162, 142, 81, 6, 24, 21, 93, 80, 134, 247, 151, 83, 79, 214, 134, 80, 222, 10, 196, 64, 247, 53, 194, 195, 207, 230, 79, 215, 134, 87, 32, 37, 100, 82, 125, 59, 41, 235, 36, 144, 171, 64, 247, 195, 12, 115, 194, 124, 243, 109, 84, 44, 155]

,但我需要转换这个字节串。我找不到答案。请建议我。 非常感谢!

编辑:

我发现这一点:

var bytes: [UInt8] = [157, 29, 111, 190, 188, 31, 233, 140, 152, 67, 196, 83, 214, 238, 232, 184, 101, 149, 45, 184, 155, 85, 184, 69, 155, 173, 196, 145, 123, 54, 238, 243, 34, 178, 190, 129, 106, 11, 26, 147, 19, 207, 204, 162, 142, 81, 6, 24, 21, 93, 80, 134, 247, 151, 83, 79, 214, 134, 80, 222, 10, 196, 64, 247, 53, 194, 195, 207, 230, 79, 215, 134, 87, 32, 37, 100, 82, 125, 59, 41, 235, 36, 144, 171, 64, 247, 195, 12, 115, 194, 124, 243, 109, 84, 44, 155] 


    print(bytes2String(bytes)) 

func bytes2String(array:[UInt8]) -> String { 
return NSString(data: NSData(bytes: array, length: array.count), encoding: NSUTF8StringEncoding)! as String 

}

链接:NSData to String in Swift Issues

,但它不工作,为什么呢?

错误:致命错误:意外发现零而展开的可选值

+0

你的字节数组含有大量的不可打印的字符。你想如何处理它们? –

+0

@Zoff迪诺,如果将这个字节转换为字符串,它将像字符串json – Clever

+0

29映射到哪个字符?你能展示你的预期产出吗? –

回答

1

如果输入的数据并不代表UTF8编码字符串的NSString构造失败,返回nil。如果你打开零值,结果是运行时错误。

NSString(data: NSData(bytes: array, length: array.count), encoding: NSUTF8StringEncoding)! 

这意味着,数组bytes: [UInt8]不能表示为uft8字符串。如果我明白,你玩一些加密框架。你确定该框架确实能够正确加密,解密吗?做一些测试第一...

2

试试这个

(STR =字符串(字节数:d,编码:NSUTF8StringEncoding))

+0

这是在哪里定义的? –