【问题标题】:How to convert Platform::Array<uint16> to raw int16*如何将 Platform::Array<uint16> 转换为原始 int16*
【发布时间】:2014-10-21 22:11:35
【问题描述】:

我有一个运行时组件,我需要一个来自给定Platform::Array&lt;uint16&gt; 的原始指针int16*。喜欢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
    ....
}

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

【问题讨论】:

  • 使用std::vector&lt;int16&gt;。或Platform::Array&lt;int16&gt;
  • 我真的需要 int16[],因为我使用的第三方库(旧 c)只有 int16 const *data 除外
  • 这并不意味着您不能使用向量来存储它。您可以使用.data() 从向量中获取原始指针。也许Platform::Array 也可以做到这一点(我不太了解),所以你根本不需要做任何转换。
  • Tnx 提示; ref new Platform::Array 然后 ->Data 效果很好!我想标记您的答案,但无法发表评论。
  • 我现在确实将其写为答案。但是为什么要使用new 另一个平台阵列呢?你已经有了一个。您是否正在这样做并复制数据,只是因为一种类型是无符号的而另一种不是?那是不必要的。您可以将原始指针从 .Data() 转换为不同的指针。

标签: windows-runtime c++-cx


【解决方案1】:

如果您只需要获取一个指向数据的原始指针,例如将其提供给某个 C 库,您通常可以从更高级别的数据结构。

您可以使用array.Data()Platform::Array&lt;T&gt; array 获取原始指针。

同样,您可以使用vec.data()std::vector&lt;T&gt; vec 获取原始指针。

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

【讨论】:

  • Platform::Array&lt;T&gt; arrayarray.Data() 与我一起工作得很好,用于不使用 Platform::Array&lt;T&gt; 的较旧的第三方代码。但在我的版本中,我在std::vector&lt;T&gt; vec 中找不到Data……也许是因为它是一个 Observable。 Tnx 的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-21
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
相关资源
最近更新 更多