2014-10-18 124 views
0

我有一個運行時組件,我需要某個給定Platform::Array<uint16>的原始指針int16*。像int16 buffer[20],但我不知道編譯時的大小。如何將Platform :: Array <uint16>轉換爲raw int16 *

我怎樣才能得到這個沒有給緩衝區一個固定的大小?

ConvertArray(const Platform::Array<uint16>^ bytes) 
{ 
    int16 buffer[bytes->Length]; // doens't work 
    int16 buffer[20]; // works, but I never know what size it needs to be 
    .... 
} 

任何建議如何做到這一點?

+0

使用'std :: vector '。或'平臺::數組' – leemes 2014-10-18 12:16:26

+0

我真的需要一個'int16 []'因爲我使用的第三個pary庫(舊c)只有'int16 const * data' – 2014-10-20 07:08:49

+0

這並不意味着你不能使用一個向量來存儲*它。你可以用'.data()'從vector獲得原始指針。也許可以用'Platform :: Array'完成同樣的工作(我不知道該怎麼說),所以你根本不需要做任何轉換。 – leemes 2014-10-20 10:32:54

回答

0

如果你需要的一切是爲了得到一個原始指針的數據,例如把它給一些C庫,你通常可以從一個更高級別的數據結構等的指針。

您可以使用array.Data()Platform::Array<T> array獲取原始指針。

同樣,你可以從std::vector<T> vecvec.data()獲得原始指針。

但這樣做時需要注意一點:根據數據結構(請參閱其文檔),以這種方式獲取的原始指針在修改數據結構時可能會失效。在插入或刪除元素(即更改大小)時發生std::vector時會發生這種情況,因爲實現可能會選擇爲內容重新分配不同大小的內存。

+0

'Platform :: Array array' with'array.Data()'完全適用於我,用於不使用'Platform :: Array '的較老的第三方代碼。但是我無法在'std :: vector vec'中找到'Data',在我的版本中......也許是因爲它是一個Observable。 Tnx的答案。 – 2014-10-22 11:33:03

相關問題