我在c中有一个函数接收一个预先分配的字符串并用数据填充它 - 我想从swift调用这个函数。 我发现了很多关于如何将字符串从swift传递给c的例子,但我发现没有一个显示在预分配字符串上写入数据的c函数。
c函数:
int GetData(char *dataJson, int maxSize);
在迅速的一面,此代码编译,但我无法找到如何预分配dataBuffer
let dataBuffer = UnsafePointer<UInt8>
GetData(dataBuffer, 2048)
有没有办法在Swift中这样做?
答案 0 :(得分:4)
一种简单的方法是将数组作为inout表达式传递给&
,
这会使用指向连续元素的指针调用该函数
存储:
var dataBuffer = Array<Int8>(repeating: 0, count: 2048)
let result = GetData(&dataBuffer, numericCast(dataBuffer.count))
优点是您不必手动管理内存,
当dataBuffer
超出范围时,它会自动释放。
答案 1 :(得分:0)
我已经弄明白了,这是未来参考的代码:
let dataBuffer = UnsafeMutablePointer<Int8>.allocate(capacity: 2048)
GetData(dataBuffer, 2048)
let jsonData = String(cString: dataBuffer)