我的 unsafe 方法接受一个集合byte[]
。所有这些byte[]
s 的大小都相同。
我需要遍历它们,寻找某些模式。搜索本质上是重新解释转换样式:在每个偏移量处,我需要考虑一个值,就好像它是一个浮点数、一个双精度数、一个短整数、一个整数等。因此,byte*
为每个输入获取一个byte[]
并在每次迭代时递增它似乎就像一个自然的方法。
不幸的是,我找不到任何方法来创建byte*
- 或者更具体地说,从数组集合中初始化它。有任何想法吗?
这是该任务的一个有些人为的版本:
static unsafe void SearchIteration(List<byte[]> arrays, byte[] resultArr)
{
fixed (byte* resultFix = resultArr)
{
byte* resultPtr = resultFix;
byte*[] pointers = new byte*[arrays.Count];
<some code to fix all the arrays and store the pointers in "pointers">
int remaining = resultArr.Length;
while (remaining > 0)
{
<look at resultPtr and each of the pointers and update *resultPtr>
remaining--;
for (int i = 0; i < pointers.Length; i++)
pointers[i]++;
}
}
}
本质上,问题是如何pointers
使用 的地址进行初始化arrays
,同时固定数组以使 GC 不会移动它们。