必须有一种更快更好的方法来交换 16 位字的字节然后这个。:
public static void Swap(byte[] data)
{
for (int i = 0; i < data.Length; i += 2)
{
byte b = data[i];
data[i] = data[i + 1];
data[i + 1] = b;
}
}
有没有人有想法?
最佳答案
在我尝试申请 Uberhacker 奖时,我提交了以下内容。对于我的测试,我使用了一个 8,192 字节的 Source 数组并调用了 SwapX2
100,000 次:
public static unsafe void SwapX2(Byte[] source)
{
fixed (Byte* pSource = &source[0])
{
Byte* bp = pSource;
Byte* bp_stop = bp + source.Length;
while (bp < bp_stop)
{
*(UInt16*)bp = (UInt16)(*bp << 8 | *(bp + 1));
bp += 2;
}
}
}
我的基准测试表明这个版本比原始问题中提交的代码快 1.8 倍以上。
关于c# - 在 C# 中用 16 位字交换字节序的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1610868/