swift - 我没有迅速得到不安全的指针
问题描述
我在 swift 中使用了一个 api,它为我提供了一个将数据发送到某个目的地的函数,该函数有一个 UnsafeMutablePointer < astruct > 类型的参数。astruct 是一个结构体,具有三个变量,第一个是数据,即 UnsafePointer < Uint8 > 类型,第二个是要发送的 uint32 类型的字节,目标是第三个。
现在的问题是如何使用这个函数,如何给这些变量调用函数并初始化结构。
我要发送的数据是一个数组 [0xf0,0xf7,0x03,0x01]。我现在该怎么办?不能接受数组作为 astruct 中的数据,它应该是 UnsafePointer,我阅读了有关 UnsafePointer 的文档,但我不太明白,有人可以帮我吗?
// swift api
func senddata (_ req: UnsafeMutablePointer < astruct >) -> OSStatus
struct astruct {
var data : UnsafePointer < UInt8 >
var bytestosend : UInt32
var destination : destination
}
var array : [UInt8] = [0xf0,0xf7,0x03,0x01]
var st = astruct(data : array , bytestosend : UInt32(array.count) , destination: dest)
senddata ( st )
如何做不安全的足尖动作?
解决方案
用于.withUnsafeBufferPointer
获取数组的数据,并用于&
将结构传递给您的 senddata 函数:
func senddata(_ req: UnsafeMutablePointer<Astruct>) -> OSStatus? {
// ...
}
struct Astruct {
let data: UnsafePointer<UInt8>
let bytestosend: UInt32
let destination: destination
}
var array: [UInt8] = [ 0xf0, 0xf7, 0x03, 0x01 ]
array.withUnsafeBufferPointer { ptr in
guard let data = ptr.baseAddress else {
return
}
var st = Astruct(data: data, bytestosend: UInt32(array.count), destination: dest)
senddata(&st)
}
推荐阅读
- shell - 根据 AD 站点成员身份将计算机加入域并放置在正确的 OU 中
- javascript - 如何在 Vue 中管理一个非常大的表单的模型?
- c - 如何从 16 字节数组中左移 n 位?
- r - 在 R model.matrix 中专门分配对比
- javascript - 如何确定特定行是否存在于表体的视口中
- asp.net-web-api - .Net Core:最好的版本是什么?SDK 2.1.301 或运行时 2.1.1
- jdbc - 如何为 keycloak 配置数据源以与 galera 集群配合使用?
- java - 在调用显式垃圾回收之后,我们可以调整 G1-GC 以设置从上次 gc 开始的阈值持续时间吗?
- excel - Excel 将一组数字转换为另一组数字
- gatsby - 如何安装 Gatsby@2(beta)