Mar*_*ell 12
顺便说一句,检查2 ^ 64个选项需要大量处理...
那么,最快的方法可能是使用Int64(aka long)或UInt64(ulong),并使用++?你真的需要byte[]吗?
作为一个hacky替代品,如何:
Array.Clear(data, 0, data.Length);
while (true)
{
// use data here
if (++data[7] == 0) if (++data[6] == 0)
if (++data[5] == 0) if (++data[4] == 0)
if (++data[3] == 0) if (++data[2] == 0)
if (++data[1] == 0) if (++data[0] == 0) break;
}
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一另一种方法是使用不安全的代码与数组通信,就好像它是一个int64 ......凌乱.
unsafe static void Test() {
byte[] data = new byte[8];
fixed (byte* first = data) {
ulong* value = (ulong*)first;
do {
// use data here
*value = *value + 1;
} while (*value != 0);
}
}
Run Code Online (Sandbox Code Playgroud)
这是增加数组值的方法:
int index = testKey.Length - 1;
while (index >= 0) {
if (testKey[index] < 255) {
testKey[index]++;
break;
} else {
testKey[index--] = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
如果index是-1这个代码后,你已经迭代所有组合.
这比使用BitConverter略快,因为它不会为每次迭代创建一个新数组.
编辑:
一个小的性能测试表明,这比使用BitConverter快1400倍...
| 归档时间: |
|
| 查看次数: |
7045 次 |
| 最近记录: |