c# - 在不安全模式下使用 64 位指针访问 16 位数组

标签 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[] 数组。

最佳答案

你只是强制它:

ulong* src = (ulong*)srcFix;

但值得注意的是:

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

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

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

关于c# - 在不安全模式下使用 64 位指针访问 16 位数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11579192/

相关文章:

c# - 什么时候读写内存合法?

c - 无论我尝试什么,我的指针/地址都是错误的

c - 带有 int 的 Malloc **

python - 如何从 numpy 数组构造一个 ndarray? Python

带有setter getter的Java字符串数组

c# - 无法读取 MS 图上的最大 Y 轴值

c# - 表达式表示 `value' ,其中在 Unity 的线程内调用 StartCoroutine 时预期为 `type' 或 `method group'

c# - 如何在 XAML 中绑定(bind)到静态属性?

c# - ObservaleCollection<MyClass> 与 IEnumerable<IMyInterface> 不同吗?

IOS如何比较具有不同值和元素数量的两个数组