gpt4 book ai didi

c# - 这是交换字节顺序的合法方法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:23 25 4
gpt4 key购买 nike

正如标题所说,我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com