如何从数据中读取以null结尾的字符串



iOS/Swift库提供一个包含以null结尾的字符串的Data对象。当通过调用String(data: dataInstance, encoding: .utf8)将其转换为String时,返回的String""结束。现在的问题是,如何将Data实例转换为String而不需要"\0";附加?也就是说,你怎么能省略末尾的空终止字符呢?

尝试只使用.trimmingCharacters(in: .whitespacesAndNewlines)没有任何效果,因此非常感谢您的建议。非常感谢。

一个可能的解决方案:确定终止零的索引,只转换数据的前一部分:

let data = Data([65, 66, 0, 67, 0])
let end = data.firstIndex(where: { $0 == 0 }) ?? data.endIndex
if let string = String(data: data[..<end], encoding:.utf8) {
print(string.debugDescription) // "AB"
}

如果数据不包含空字节,那么所有内容都将被转换。

您可以执行一些指针操作并使用init(cString:)初始化程序,该初始化程序接受一个以null结尾的字符串。

let resultString = data.withUnsafeBytes { buffer in
guard let pointer = buffer.baseAddress?.assumingMemoryBound(to: CChar.self) else { 
return "" 
}
return String(cString: pointer)
}

最新更新