首页 > 解决方案 > 我没有迅速得到不安全的指针

问题描述

我在 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 )

如何做不安全的足尖动作?

标签: swiftunsafe-pointers

解决方案


用于.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)
}

推荐阅读