这是交换字节序的合法方法吗?

卡罗里兹

就像标题所说的,我有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)));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章