一尘不染

快速将字符串转换为UnsafeMutablePointer

swift

我有一个映射到Swift的C函数定义为:

func swe_set_eph_path(path: UnsafeMutablePointer<Int8>) -> Void

我正在尝试传递函数的路径并尝试过:

        var path = [Int8](count: 1024, repeatedValue: 0);
        for i in 0...NSBundle.mainBundle().bundlePath.lengthOfBytesUsingEncoding(NSUTF16StringEncoding)-1
        {
            var range = i..<i+1
            path[i] = String.toInt(NSBundle.mainBundle().bundlePath[range])
        }
        println("\(path)")
        swe_set_ephe_path(&path)

但是在path [i]上我得到了错误:

‘下标’不可用:不能下标Int范围的字符串

swe_set_ephe_path(NSBundle.mainBundle().bundlePath)

也不

swe_set_ephe_path(&NSBundle.mainBundle().bundlePath)

也不管用

除了无法正常工作外,我认为还必须有一种更好,更轻松的方法来做到这一点。以前使用CString在StackOverflow上的答案似乎不再起作用。有什么建议?


阅读 226

收藏
2020-07-07

共1个答案

一尘不染

使用CString在StackOverflow上的先前答案似乎不再起作用

尽管如此,UnsafePointer<Int8>还是一个C字符串。如果您的上下文绝对需要一个UnsafeMutablePointer,请强制执行,如下所示:

let s = NSBundle.mainBundle().bundlePath
let cs = (s as NSString).UTF8String
var buffer = UnsafeMutablePointer<Int8>(cs)
swe_set_ephe_path(buffer)

当然,我没有您的swe_set_ephe_path,但是在进行如下测试时,它在我的测试中效果很好:

func swe_set_ephe_path(path: UnsafeMutablePointer<Int8>) {
    println(String.fromCString(path))
}
2020-07-07