代码之家  ›  专栏  ›  技术社区  ›  Kamil Szot

如何快速操作字节[]中的数据?

  •  4
  • Kamil Szot  · 技术社区  · 14 年前

    我需要删除 byte[] 我有。 是否有一些内置函数可以帮助我做到这一点,或者我必须循环数组,逐个拾取和移动每个字节?

    有没有比手动更快的方法?

    4 回复  |  直到 9 年前
        1
  •  3
  •   mdma    14 年前

    手工编码可能非常快,瓶颈是cpu到内存的带宽。

        2
  •  1
  •   Steve Danner    14 年前

    听起来是个不错的工作 parallel For loop (假设您可以使用.NET4)。

        3
  •  1
  •   Thomas Levesque    14 年前

    如果您不介意创建一个新数组而不是修改现有的数组,那么可以使用Linq轻松地完成这项工作:

    bytes = bytes.Where((b, i) => (i + 1) % 4 != 0).ToArray();
    

    要每3个字节插入一个项,无法使用内置扩展方法。但您可以创建自己的扩展方法:

    public static IEnumerable<T> InsertEvery<T>(this IEnumerable<T> source, T valueToInsert, int frequency)
    {
        int n = 0;
        foreach (var item in source)
        {
            if ((n + 1) % frequency == 0)
                yield return valueToInsert;
            yield return item;
            n++;
        }
    }
    
    ...
    
    bytes = bytes.InsertEvery(0, 3).ToArray();
    

    for(int i = 3; i < bytes.Length; i += 4)
    {
        bytes[i] = 0;
    }
    
        4
  •  0
  •   Lee    14 年前

    最快的方法可能是创建一个包装器来转换索引,而不是创建一个新的数组。