我需要读取包含以大字节序存储的数百万个Int16的二进制文件。

我的第一种方法是使用BitConverter和Array.Reverse(),但对于我的目的而言似乎太慢了。有没有办法用按位算术呢?

最佳答案

那么Int16的数学公式就是:

public Int16 SwitchEndianness(Int16 i)
{
    return (Int16)((i << 8) + (i >> 8));
}


或者,如果您有2字节数组:

public Int16 SwitchEndianness(byte[] a)
{
    //TODO: verify length
    return (Int16)((a[0] << 8) + a[1]);
}


但是您必须尝试一下,看看它是否比反转阵列更快。

关于c# - 如何在不使用BitConverter的情况下交换Int16的字节序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28866797/

10-09 03:10