簡體   English   中英

浮點數組轉換

[英]Float-Array conversion

我有一個像這樣的向量:

vector<Vec3f> myCoolVector

它充滿了[1.0, 2.0, 3.1][4.2, 2.1, 7.7]...類的數組。


我想將myCoolVector轉換回2d-array of floats2d-array of floats以將其作為簡單的多維浮點數數組發送回Swift(例如: [[Float]] )。

但是我返回到(Swift)的是一個帶有這種瘋狂類型的變量:

 Optional<UnsafeMutablePointer<Optional<UnsafeMutablePointer<Float>>>> 

...而不只是這種類型: [[Float]]


請看一下我的代碼:

(1)代碼-C ++

+(float **)myCoolFunction {
    vector<Vec3f> myCoolVector

    // here fillMyCoolVector() fills the myCoolVector - NICE

    float **floatArrayBackToSwift;
    floatArrayBackToSwift = new float*[myCoolVector.size()];

    for( size_t i = 0; i < myCoolVector.size(); i++ )
    {
        ary[i] = new float[3];
        ary[i][0] = myCoolVector[i][0];
        ary[i][1] = myCoolVector[i][1];
        ary[i][2] = myCoolVector[i][2];
    }
    return floatArrayBackToSwift;
}

(2)代碼-Swift

let floatArray = MyBridge.myCoolFunction() // should be [[1.0, 2.0, 3.1], [4.2, 2.1, 7.7], ...]
print(floatArray)

我的問題: 如何將myCoolVector作為簡單的二維數組(如[[Float]]回Swift?

任何幫助將不勝感激!

您的myCoolFunction返回float ** ,即指向float指針。 而且C / C ++中的任何指針類型都不能自動轉換為Swift Array ,C / C ++中的任何其他類型都不能自動轉換為Swift Array

如果您確實想要Array<Array<Float>> (又名[[Float]] )中的結果,則需要編寫一些Swift代碼以將Optional<UnsafeMutablePointer<Optional<UnsafeMutablePointer<Float>>>>Array<Array<Float>>

像這樣:

class MyWrappter {
    static func myCoolFunction(count: Int) -> [[Float]] {
        let ptrPtrFloat: UnsafeMutablePointer<UnsafeMutablePointer<Float>?>! = MyBridge.myCoolFunction()

        let bpPtrFloat = UnsafeBufferPointer(start: ptrPtrFloat, count: count)
        return bpPtrFloat.map {ptrFloat in
            [ptrFloat![0], ptrFloat![1], ptrFloat![2]]
        }
    }
}

請記住,您的myCoolFunction不會返回有關vector<Vec3f>的大小的任何信息,因此您可能需要使用其他方法將其傳遞給Swift端。


Swift不擅長優化嵌套數組。 最好考慮采用simd.float3或類似的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM