将swift 4字符串转换为c unsigned char *

时间:2018-08-09 19:36:16

标签: ios c swift

我正在尝试与Swift中的C API进行交互,并且能够成功将unsigned char *转换为String,但无法将String转换回unsigned char *

这是我的C函数,它返回传递的字符串:

unsigned char* test(unsigned char* hello) {
    return hello;
}

这是我快速的代码来调用不起作用的c函数:

  

let str =“你好,世界!”
  print(String(cString:test(str)))

它的目标是将“ hello,world”传递给c,然后让c传递“ hello,world”,然后进行打印。

我从这里尝试过解决方案,但是对于Swift 4来说,它们似乎都已经过时了

尝试缓冲:

  

let buffer = UnsafeMutableBufferPointer.allocate(容量:4)

     

_ = buffer.initialize(from:1 ... 4)

     

print(String(cString:test(buffer)))

错误:

无法将类型'UnsafeMutableBufferPointer'的值转换为预期的参数类型'UnsafeMutablePointer!'

1 个答案:

答案 0 :(得分:1)

  • 您需要为UnsafeMutableBufferPointer指定元素类型。

  • 可以通过属性UnsafeMutableBufferPointer访问baseAddress内容的指针。

尝试一下:

let str = "hello, world!"

let buffer = UnsafeMutableBufferPointer<CUnsignedChar>.allocate(capacity: str.utf8.count + 1)
defer {buffer.deallocate()}

memcpy(buffer.baseAddress, str, str.utf8.count + 1)

print(String(cString: test(buffer.baseAddress)))