将字节数组扫描为uint数组

时间:2011-04-24 17:58:00

标签: c# performance

我有一个大字节数组,大部分为0,但我需要处理一些值。如果这是C ++或不安全的C#我将使用32位指针,并且只有当前的32位不是0时,我会查看单个字节。这样可以更快地扫描全0块。不幸的是,这必须是安全的C#: - )

我可以使用一个uint数组而不是一个字节数组,然后操纵单个字节,但它使我所做的事情比我喜欢的要麻烦得多。我正在寻找更简单的东西,比如指针示例(我想念指针叹息

谢谢!

4 个答案:

答案 0 :(得分:2)

我跟着这个家伙说的话: Using SSE in c# is it possible?

基本上,写一点C / C ++,可能使用SSE,有效地实现扫描部分,并从C#调用它。

答案 1 :(得分:2)

如果代码必须是安全的,并且您不想使用更大的类型并“移位”,那么您将不得不迭代每个字节。

(编辑)如果数据足够稀疏,你可以使用字典来存储非零值;然后找到非零是微不足道的(稀疏阵列变得很便宜)。

答案 2 :(得分:0)

您可以访问字符

string.ToCharArray()

或者您可以访问原始字节[]

Text.Encoding.UTF8Encoding.GetBytes(stringvalue)

最终,我认为你需要的是

MemoryStream stream;
stream.Write(...)

然后你就可以直接使用内存的缓冲区了

还有UnmanagedMemoryStream但我不确定它是否在内部使用不安全的电话

答案 3 :(得分:0)

您可以使用BitConverter类:

byte[] byteArray = GetByteArray(); // or whatever
for (int i = 0; i < b.Length; I += 2)
{
    uint x = BitConverter.ToUInt32(byteArray, i);
    // do what you want with x
}

另一种选择是从字节数组中创建MemoryStream,然后使用BinaryReader从中读取32位值。