gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:00 25 4
gpt4 key购买 nike

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

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

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

这是我调用 c 函数的 swift 代码,但它不起作用:

let str = "hello, world!"
print(String(cString:test(str)))

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

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

缓冲尝试:

let buffer = UnsafeMutableBufferPointer.allocate(capacity: 4)

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

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

错误:

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

最佳答案

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

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

试试这个:

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)))

关于ios - 将 swift 4 字符串转换为 c unsigned char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51774604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com