2014-10-18 102 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

相关问题