我需要从UInt8
数组中读取并将某些字节追加到String
中,但无论我尝试什么,它都会给我错误。 +=
不适用于它抱怨的CChar(ptr[i])
。 String.append()
无效,预计Character
而不是CChar
,为什么地狱中的所有内容都可以在Swift中转换为CChar
而不是Character
?这是我的样本函数
func FromBuf(ptr: UnsafeMutablePointer<UInt8>, length len: Int) -> String {
var i: Int = 0
while (i < len) {
if (i > 0) { s.append(CChar(ptr[i])) }
i++
}
return s
}
另外,从String
数组的一部分设置UInt8
的最佳方法是什么?我试过这个,但它不起作用,var s = String(bytes: &ptr[3], encoding: NSASCIIStringEncoding)
。实际上,这个初始化器也缺乏指定从指针获取多少字节的方法。
答案 0 :(得分:1)
您可以使用Foundation方法NSString(bytes:length:encoding:)
将原始字节转换为String。
import Foundation
func FromBuf(ptr: UnsafeMutablePointer<UInt8>, length len: Int) -> String? {
// convert the bytes using the UTF8 encoding
if let theString = NSString(bytes: ptr, length: len, encoding: NSUTF8StringEncoding) {
return theString as String
} else {
return nil // the bytes aren't valid UTF8
}
}
如果您只想使用字节数组的一部分,那么您还可以将起始偏移量作为附加参数提供给函数。
import Foundation
func FromBuf(ptr: UnsafeMutablePointer<UInt8>, startingOffset: Int, length len: Int) -> String? {
// convert the bytes using the UTF8 encoding
if let theString = NSString(bytes: ptr + startingOffset, length: len, encoding: NSUTF8StringEncoding) {
return theString as String
} else {
return nil // the bytes aren't valid UTF8
}
}