我有一种方法可以在 for 语句中使用二进制移位将 ulong 转换为字节,但它的时间效率不是很高。有没有办法投射ulong
大小为 64 的数组直接转换为大小为 512 的字节数组?这是一段运行数千次的代码,我需要保存每一毫秒,这样我才能节省几秒钟。
编辑:
现在这就是我正在做的事情:
for (int k = 0; k < ulongs.Length; k++) {
bytes[(k << 3)] = (byte)(ulongs[k] >> 56);
bytes[(k << 3) + 1] = (byte)(ulongs[k] >> 48);
bytes[(k << 3) + 2] = (byte)(ulongs[k] >> 40);
bytes[(k << 3) + 3] = (byte)(ulongs[k] >> 32);
bytes[(k << 3) + 4] = (byte)(ulongs[k] >> 24);
bytes[(k << 3) + 5] = (byte)(ulongs[k] >> 16);
bytes[(k << 3) + 6] = (byte)(ulongs[k] >> 8);
bytes[(k << 3) + 7] = (byte)(ulongs[k]);
}
unsafe
{
fixed (ulong* src = ulongs)
{
Marshal.Copy(new IntPtr((void*)src), bytes, 0, 512);
}
}
这似乎有效。我不确定是否需要修复,但我在定时测试中损失了整整一秒。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)