我有一个大字节数组,大部分为0,但我需要处理一些值。如果这是C ++或不安全的C#我将使用32位指针,并且只有当前的32位不是0时,我会查看单个字节。这样可以更快地扫描全0块。不幸的是,这必须是安全的C#: - )
我可以使用一个uint数组而不是一个字节数组,然后操纵单个字节,但它使我所做的事情比我喜欢的要麻烦得多。我正在寻找更简单的东西,比如指针示例(我想念指针叹息)
谢谢!
答案 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位值。