c# - 在 C# 中用 16 位字交换字节序的更快方法

标签 c# endianness

必须有一种更快更好的方法来交换 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/

相关文章:

c++ - 在 C++ 中转换 big-endian long?

c# - 重命名图片的副本

c# - 如何找到字符串中特定句子的所有出现?

c# - 从 Excel 互操作读取并将不同的值写入另一个工作表

bash - 需要一个shell脚本来将big endian转换为little endian

c - 处理具有不同 key 大小和字节序的异或

C 40 位字节交换(endian)

c# - 避免在运行单元测试后构建完整的解决方案

c# 类引用而不是实例引用

c - [C]十进制IP转点分十进制