ios - 将 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!”
解决方案
您需要为 指定元素类型
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)))
推荐阅读
- reactjs - 使用 react-google-login 和 django-allauth 刷新令牌
- python - 无法将 GPU 与 tensorflow-gpu 一起使用
- asp.net - 无法在两个不同的 Web api 调用之间获取会话值
- javascript - 如何在使用微服务和 AWS 的对话中构建对我的私有图像的访问?
- python - 忽略消息包含特定字符串的警告
- javascript - Firebase 函数配置不会部署
- javascript - 在百里香叶中未初始化更改属性
- mysql - 无法连接到数据库 Laravel Sail
- php - 如何从php数组动态呈现树枝条件
- javascript - 使用元素数组在 React js 中创建子菜单