gpt4 book ai didi

c - C 类型 float 的 Swift 3 UnsafeMutablePointer 初始化**

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:08 25 4
gpt4 key购买 nike

在 Swift 3 中,我需要将数据发送到接受 float ** 的 C 对象输入。

在 Swift 2 中,我曾经声明一个 UnsafeMutablePointer< UnsafeMutablePointer<Float32>> ,构建一个 swift 数组(仅用于 init!),并将其传递给指针,它起作用了:

    var bufferOut: UnsafeMutablePointer< UnsafeMutablePointer<Float32>>?
arrayOut = Array(repeating: Array(repeating: 0, count: Int(size1), count: Int(size2))
bufferOut = UnsafeMutablePointer< UnsafeMutablePointer<Float32>>(arrayOut)

这一切在 Swift 3 中都被打破了!

  • 通过 C 型考试最快捷的方法是什么 float**并初始化它?
  • UnsafeMutablePointer< UnsafeMutablePointer<T>> 中分配值的最佳方式是什么? ?

文档说 T **应该使用 AutoreleasingUnsafeMutablePointer<T>但实际上我从未成功构建过一个!

请注意,我实际上并不关心上面示例中的数组!如果我可以直接使用已知容量初始化 Pointer,我会的。

注意:Expected use cases Section of UnsafeRawPointer描述了 C 数组和 C 缓冲区等有用的情况,但是为上述构造转换这些方法并不明显!

最佳答案

这是我最终做的和正在做的事情。它遵循来自 new UnsafeMuTablePointer Reference 的建议显示简单方案的示例程序。综上所述,需要从顶层开始分配每个slot!

所以为了构造一个UnsafeMutablePointer< UnsafeMutablePointer<T>>大小为 (size1, size2)(如矩阵),您可以使用此处称为 vectorBuf 的中间 vector 按如下方式进行:

    var vectorBuf : UnsafeMutablePointer<T>?
vectorBuf = UnsafeMutablePointer<T>.allocate(capacity: size2)
for index in 0...(size2) { // had Int(channelCount)*
vectorBuf!.advanced(by: index).pointee = 0.0
}

/// This is where allocation and initialization happens:
bufferOut = UnsafeMutablePointer< UnsafeMutablePointer<T>?>.allocate(capacity: Int(size1))
for index in 0...Int(size1) {
bufferOut!.advanced(by: index).pointee = UnsafeMutablePointer<T>.allocate(capacity: (size2) )
bufferOut!.advanced(by: index).pointee?.assign(from: vectorBuf!, count: size2)
}

希望这对其他尝试在 C/C++ 中使用 swift 进行信号处理调用的人有用!

关于c - C 类型 float 的 Swift 3 UnsafeMutablePointer 初始化**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40128275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com