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

Swift String to bytes in a buffer

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

示例:

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

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

如何设置这两个缓冲区并来回复制字符串?我尝试探索 _bridgeToObjectiveC().utf8String ans 和 unsafemutablepointer...但我感到迷茫...

这是设置缓冲区并将它们传递给 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 函数。

如果结果缓冲区在 return 上填充了以 null 结尾的 C 字符串 然后你可以用

创建一个 Swift 字符串
let resultString = String(cString: replyBuffer)