Swift字符串到缓冲区中的字节

时间:2018-06-14 10:40:14

标签: swift unsafe-pointers

我有一个只包含ASCII字符的swift String。我必须将它们放在一个char *缓冲区中,然后我将其转换为void *并反向执行此过程以获取已回复的字符串。

示例:

bool query(const void* queryString, byte queryLength, void* replyBuffer, byte bufferLength);

所以,我必须设置两个缓冲区。一个将保存我的查询字符串和一个,即180字节大,以包含回复。

如何设置这两个缓冲区并来回复制字符串?我试着探索_bridgeToObjectiveC().utf8String以及不安全的指针......但我感到迷茫......

1 个答案:

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