如何将Platform :: Array <uint16>转换为raw int16 * </uint16>

时间:2014-10-18 12:13:10

标签: windows-runtime c++-cx

我有一个运行时组件,我需要一些给定int16*的原始指针Platform::Array<uint16>。和int16 buffer[20]一样,但我不知道编译时的大小。

如何在不给缓冲区提供固定大小的情况下获得此结果?

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
    ....
}

有任何建议如何做到这一点?

1 个答案:

答案 0 :(得分:0)

如果您需要的是为数据提供原始指针,例如将其提供给某个C库,那么通常可以从中获取这样的指针更高层次的数据结构。

您可以使用Platform::Array<T> arrayarray.Data()获取原始指针。

同样,您可以使用std::vector<T> vecvec.data()获取原始指针。

但执行此操作时需要注意的一点是:根据数据结构(请参阅其文档),在修改数据结构时,以这种方式获得的原始指针可能会无效。在std::vector的情况下,当插入或删除元素(即更改大小)时会发生这种情况,因为实现可能会选择为内容重新分配不同大小的内存。