【问题标题】:Access 16 bit array with 64 bit pointers in unsafe mode [closed]在不安全模式下使用 64 位指针访问 16 位数组 [关闭]
【发布时间】:2012-07-20 12:16:50
【问题描述】:

这是我的代码:

              long max = pcmU16.Length;
              long index = 0;

              fixed (ushort* srcFix = pcmU16)
              {
                    ushort* src = srcFix;

                    next:

                    *src = 32768;
                    src++;
                    index++;

                    if (index != max)
                    {
                          goto next;
                    }
              }

如您所见,它一次写入 2 个字节。如何使用ulong类型一次写入8个字节? pcmU16 是 ushort[] 数组。

【问题讨论】:

  • 它可以在没有 (void*) 的情况下工作。我在 5 分钟前发现了它。在我没有在铸造时使用 * 之前,这是我的问题。回答一下,我会接受的。

标签: c# arrays pointers unsafe


【解决方案1】:

你只是强迫它:

ulong* src = (ulong*)srcFix;

但值得关注的事情:

  • max 需要除以 4,否则超出范围
  • 您需要处理任何杂散值 - 例如,假设您有 10 个 ushort 值(max 最初是 10 个);即 2 组 ulong(每组 4 组),最后 2 组 ushort;通常的除数/余数的东西

最后一点,您可能会发现索引语法更方便,即

for(int i = 0 ; i < max ; i++) {
    src[i] = ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2015-11-28
    • 2015-09-17
    • 2012-07-16
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多