正如标题所说,我有 UInt16,它是使用 BinaryReader
从文件中读取的。该文件包含顺序为“0x0102”的十六进制,而在读取后它是相反的。这是合法的吗?我听说 BitConverter 是根据 pc 中设置的字节序来工作的,但我用了两次,所以似乎一切都应该工作正常?
public static UInt16 EndiannessSwap(UInt16 data)
{
var step1 = BitConverter.GetBytes(data);
var step2 = step1.Reverse().ToArray();
var step3 = BitConverter.ToUInt16(step2, 0);
return step3;
}
最佳答案
是的,这段代码可以工作并且可以移植,尽管效率不高。
你是对的,BitConverter
根据机器的字节顺序工作,但是因为你使用它的输出作为输入,所以这会取消。
一种更有效的交换字节顺序的方法是使用位移位。鉴于 UInt16
仅由 2x byte
(8 位)组成,我们可以按如下方式轻松交换它:
public static UInt16 EndiannessSwap(UInt16 data)
{
return unchecked((ushort)((data << 8) | (data >> 8)));
}
关于c# - 这是交换字节顺序的合法方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558241/