swift - Swift字符串到缓冲区中的字节
问题描述
我有一个只包含 ASCII 字符的快速字符串。我必须将它们放在一个 char* 缓冲区中,然后将其转换为 void* 并反向执行此过程以获取回复的字符串。
例子:
bool query(const void* queryString, byte queryLength, void* replyBuffer, byte bufferLength);
所以,我必须设置两个缓冲区。一个将保存我的查询字符串,另一个是 180 字节大,用于包含回复。
如何设置这两个缓冲区并来回复制字符串?我尝试探索_bridgeToObjectiveC().utf8String
ansafemutablepointer 以及 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 函数。
如果结果缓冲区在返回时填充了一个以 null 结尾的 C 字符串,那么您可以创建一个 Swift 字符串
let resultString = String(cString: replyBuffer)
推荐阅读
- php - HTML div 未在某些设备中显示
- javascript - ES6 类继承可以翻译成等效的 ES5 代码吗?
- c# - 我应该如何创建一个在调用方法时返回的列表,它包含两个列表,每个列表包含四个元组?
- android - 对 Room 2.1.0 后升级的 defaultValue 迁移要求感到困惑
- mysql - 使用 MySQL sql_mode=only_full_group_by 获取组的第一行
- python - Django 应用程序:运行服务器时出现“找不到 URL”错误
- lambda - 教会数词中 m 的 0 次方
- batch-file - 批处理文件中的权限移动性
- sql-server - 如何在我的聚合 SQL 查询中正确考虑订单返回?
- css - 字体真棒 5 伪类不适用于我的工具包