我UInt8在使用swift 将Byte数组转换为字符串时遇到问题.我搜索并找到一个简单的解决方案
String.stringWithBytes(buff, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)
但它显示错误String.type没有成员stringWithBytes.谁能建议我一个解决方案?
这是我的代码,我得到一个NSData并转换为字节数组,然后我必须将该字节数组转换为字符串.
let count = data.length / sizeof(UInt8)
var array = [UInt8](count: count, repeatedValue: 0)
data.getBytes(&array, length:count * sizeof(UInt8))
String.stringWithBytes(buff, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 72
Swift 3/Xcode 8的更新:
字符串来自bytes: [UInt8]:
if let string = String(bytes: bytes, encoding: .utf8) {
print(string)
} else {
print("not a valid UTF-8 sequence")
}
Run Code Online (Sandbox Code Playgroud)
字符串来自data: Data:
let data: Data = ...
if let string = String(data: data, encoding: .utf8) {
print(string)
} else {
print("not a valid UTF-8 sequence")
}
Run Code Online (Sandbox Code Playgroud)
Swift 2/Xcode 7的更新:
字符串来自bytes: [UInt8]:
if let string = String(bytes: bytes, encoding: NSUTF8StringEncoding) {
print(string)
} else {
print("not a valid UTF-8 sequence")
}
Run Code Online (Sandbox Code Playgroud)
字符串来自data: NSData:
let data: NSData = ...
if let str = String(data: data, encoding: NSUTF8StringEncoding) {
print(str)
} else {
print("not a valid UTF-8 sequence")
}
Run Code Online (Sandbox Code Playgroud)
上一个答案:
String没有stringWithBytes()方法.
NSString有个
NSString(bytes: , length: , encoding: )
Run Code Online (Sandbox Code Playgroud)
您可以使用的方法,但您可以直接从中创建字符串NSData,而无需UInt8数组:
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
println(str)
} else {
println("not a valid UTF-8 sequence")
}
Run Code Online (Sandbox Code Playgroud)
这对我有用:
String(bytes: bytes, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)
Swifty解决方案
array.reduce("", combine: { $0 + String(format: "%c", $1)})
Run Code Online (Sandbox Code Playgroud)
十六进制表示
array.reduce("", combine: { $0 + String(format: "%02x", $1)})
Run Code Online (Sandbox Code Playgroud)
Swift 5.2.2 更新:
String(decoding: yourByteArray, as: UTF8.self)
Run Code Online (Sandbox Code Playgroud)
小智 5
此解决方案有效.
NSString(bytes: data!, length: data!.count, encoding: NSUTF8StringEncoding)
Run Code Online (Sandbox Code Playgroud)
斯威夫特 3
由于“NSUTF8StringEncoding”,以下给了我一个错误:
String(data: nsdata, encoding: NSUTF8StringEncoding)!
Run Code Online (Sandbox Code Playgroud)
这在 swift 3 中对我有用:
let xmlStr:String = String(bytes: data!, encoding: String.Encoding.utf8)!
Run Code Online (Sandbox Code Playgroud)
小智 5
对于无法将字节数组转换为字符串的任何人,请尝试此操作
String(data: Data(decrypted), encoding: .utf8)
Run Code Online (Sandbox Code Playgroud)
这是我的示例字符串扩展。我将它用于 AES
extension String {
func decryptAES(key: String, iv: String) -> String {
do {
let encrypted = self
let key = Array(key.utf8)
let iv = Array(iv.utf8)
let aes = try AES(key: key, blockMode: CTR(iv: iv), padding: .noPadding)
let decrypted = try aes.decrypt(Array(hex: encrypted))
return String(data: Data(decrypted), encoding: .utf8) ?? ""
} catch {
return "Error: \(error)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62803 次 |
| 最近记录: |