在不安全模式下访问具有64位指针的16位数组

时间:2012-07-20 12:16:51

标签: c# arrays pointers unsafe

这是我的代码:

              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 [] array。

1 个答案:

答案 0 :(得分:2)

你只是强迫它:

ulong* src = (ulong*)srcFix;

值得关注的事情:

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

作为最后一点,你可能会找到更方便的索引语法,即

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