我在 swift 中与 libxml2 交互,C API 绑定(bind)(仍然)产生 UnsafePointer<Int8>!
对于 C 弦。而 Swift API 通常会导致 UnsafePointer<UInt8>!
.
所以我的问题是 - 我是否以正确的方式将字符串转换为以 null 结尾的 C 字符串?
let cfilePath = unsafeBitCast(myStringString.nulTerminatedUTF8.withUnsafeBufferPointer { $0.baseAddress }, to: UnsafePointer<Int8>.self)
我是否应该更喜欢使用其他方法,而不是仅仅通过解释 UInt8
来绕过 Swift 类型检查?字节为 Int8
字节?
最佳答案
我不确定这是否能完全解决您的问题,但对于我通过蓝牙发送字符串的项目来说,这确实有效:
extension String {
var nullTerminated: Data? {
if var data = self.data(using: String.Encoding.utf8) {
data.append(0)
return data
}
return nil
}
}
这样使用
let data = "asfasf".nullTerminated
我找不到其他答案引用的函数:nulTerminatedUTF8。也许它已经这样做了。
关于Swift3:将字符串转换为以空字符结尾的 C 字符串的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37850513/