Swift3:将字符串转换为以空字符结尾的 C 字符串的正确方法

标签 swift swift3

我在 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/

相关文章:

swift - 如何安全地从用户默认值中解包值?

swift - 如何在 UITableView 中移动行后更新 CoreData?

ios - 如何从 UITabBarViewController 获取对 View Controller 的引用

ios - swift 3 : Convert SHA256 hash string to SecCertificate

ios - 如何使用 swift 创建一个闹钟应用程序?

ios - 如何从 swift 4 上的 didFinishLaunchingWithOptions 获取 Notificationcenter 数据

swift - Spritekit中扩展圆形抠图转场效果

ios - AudioKit 崩溃 - 如何用它播放音频文件?

ios - InvalidFirebaseData Swift 3 只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象。

ios - UIImage 上的 UILabel 并将该图像保存在 Swift 3 中的图库中以用于照片编辑应用程序