我需要读取包含以大字节序存储的数百万个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/