首页 > 解决方案 > 将 swift 4 字符串转换为 c unsigned char *

问题描述

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

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

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

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

let str = "你好,世界!"
打印(字符串(cString:测试(str)))

它的目标是将“hello, world”传递给 c,然后让 c 将“hello, world”传回并打印出来。

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

缓冲尝试:

让缓冲区 = UnsafeMutableBufferPointer.allocate(容量:4)

_ = buffer.initialize(来自:1...4)

打印(字符串(cString:测试(缓冲区)))

错误:

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

标签: ioscswift

解决方案


  • 您需要为 指定元素类型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)))

推荐阅读