我有一个只包含ASCII字符的swift String。我必须将它们放在一个char *缓冲区中,然后我将其转换为void *并反向执行此过程以获取已回复的字符串。
示例:
bool query(const void* queryString, byte queryLength, void* replyBuffer, byte bufferLength);
所以,我必须设置两个缓冲区。一个将保存我的查询字符串和一个,即180字节大,以包含回复。
如何设置这两个缓冲区并来回复制字符串?我试着探索_bridgeToObjectiveC().utf8String
以及不安全的指针......但我感到迷茫......
答案 0 :(得分:1)
这是设置缓冲区并将它们传递给C函数的方法:
let queryString = "Query ..."
let queryBuffer = Array(queryString.utf8)
var replyBuffer = Array(repeating: UInt8(0), count: 180)
let result = query(queryBuffer, numericCast(queryBuffer.count), &replyBuffer, numericCast(replyBuffer.count))
queryBuffer
是一个数组,其中包含字符串的UTF-8表示,
和replyBuffer
包含指定数量零字节的数组。
数组分别传递给queryBuffer
和&replyBuffer
的函数,它将指针传递给元素存储
到C函数。
如果结果缓冲区在返回时填充了以null结尾的C字符串 然后你可以用
创建一个Swift字符串let resultString = String(cString: replyBuffer)