Ste*_*n.B 6 c swift swift3 swift4
我试图将const char *传递给从Swift中的Swift字符串转换而来的旧C库。
这是我正在调用的C函数:
artnet_node artnet_new(const char *ip, int verbose) { ...
Run Code Online (Sandbox Code Playgroud)
如何将Swift字符串转换为此const char类型?当我像这样传递ipAddress时,它可以工作:
internal var ipAddress = "192.168.1.43"
Run Code Online (Sandbox Code Playgroud)
但是当我这样通过时dit不起作用
internal var ipAddress:String = "192.168.1.43"
Run Code Online (Sandbox Code Playgroud)
我在需要指定类型的函数中需要它:
internal func setupArtnode(ip:String) -> Int{
Run Code Online (Sandbox Code Playgroud)
我尝试使用AnyObject而不是String,但这也不起作用。
谢谢。
您应该能够将 aString直接传递给期望的 C 函数const char *,它将自动转换为以空字符结尾的 UTF-8 字符串:
let string = "string"
let node = artnet_new(string, 1)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅与 C API 交互。以下是相关摘录:
当一个函数被声明为接受一个 UnsafePointer 参数时,它可以接受以下任何一个:
- 一个字符串值,如果 Type 是 Int8 或 UInt8。该字符串将在缓冲区中自动转换为 UTF8,并将指向该缓冲区的指针传递给函数。
不知道为什么,但这段代码可以工作。这将字符串传递给需要 const char* 的 C 函数,这似乎与 unsafePointer 相同。
internal func setupArtnode(ipAddress:String) -> NSInteger{
let cString = self.ipAddress.cString(using: String.defaultCStringEncoding)!
let newString:String = NSString(bytes: cString, length: Int(ipAddress.characters.count), encoding:String.Encoding.ascii.rawValue)! as String
let key2Pointer = UnsafePointer<Int8>(newString)
node = artnet_new(key2Pointer, Int32(verbose)) // VERBOSE : true(1) , false(0)
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5586 次 |
| 最近记录: |