首页 > 解决方案 > Swift字符串到缓冲区中的字节

问题描述

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

例子:

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

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

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

标签: swiftunsafe-pointers

解决方案


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

推荐阅读