如何在C#中从文件中读取16位数字?

如何在C#中从文件中读取16位数字?,c#,bit-manipulation,C#,Bit Manipulation,我有一个要求,它涉及一些位操作级别。我没有bit操作的经验 从文件字节中,我必须选择第五和第六个字节 必须从这个公式中计算出这个值,在给定的例子中是这样解释的 字节5-LSB,字节6 MSB。在示例中,偏移量为598(LSB*(MSB),您不需要处理单个位。这些是十六进制值,因此98是单字节,05是单字节 转换中似乎也有错误。您需要将LSB添加到移位的MSB,而不是乘法。598=0x98+(0x05MSB还表示最高有效字节 var data = new byte[] { 0xA9, 0

我有一个要求,它涉及一些位操作级别。我没有bit操作的经验

从文件字节中,我必须选择第五和第六个字节

必须从这个公式中计算出这个值,在给定的例子中是这样解释的


字节5-LSB,字节6 MSB。在示例中,偏移量为598(LSB*(MSB),您不需要处理单个位。这些是十六进制值,因此98是单字节,05是单字节


转换中似乎也有错误。您需要将LSB添加到移位的MSB,而不是乘法。598=0x98+(0x05
MSB
还表示最高有效字节

    var data = new byte[] { 0xA9, 0x43, 0x50, 0x49, 0x00, 0x98, 0x05, 0x28 };

    ushort value = BitConverter.ToUInt16(data, 5);

    Console.WriteLine(value.ToString("X4"));
BitConverter.ToUInt16
将从索引
5
开始的
data
数组中读取两个字节,即
0x98
0x05
。然后它将应用公式计算结果
0x0598

公式取决于CPU体系结构


这些是十六进制的。因此,按4位的任意倍数进行位移位将保留数字。就像在十进制中乘以10保留相同的数字,但只移动小数点或添加零。0x05,您在编写
(LSB*时可能指的是
|
而不是
*
(MSB@Wyck-非常感谢您的解释!但是当我们说这个
0x05 0x98定义为LSB时,0x05是MSB。最重要的字节。这个字节中“1”的变化对数字的影响比另一个字节中“1”的变化更大(我过去就是这样记得的)。如果这是存储在文件中的偏移量,则可能是指
0x598
th字节。这是1432字节(十进制)的偏移量。您必须查阅规范/文档的文本才能确定。(换句话说,不,不要在文件中查找值0x0598)谢谢!它成功了!但是为什么
位转换器。ToUInt16
会返回我期望的结果?我的意思是这个函数返回的结果是基于相同的公式吗?@PawanNogariya:是的。这不是唯一的问题。世界上成千上万的Pawan面临着相同的问题,所以他们为他们制定了特殊的方法来解决这个问题。我不知道这是否是真的这是一个讽刺性的回答,但实际上我问了这个问题,因为我不知道需求中给我的公式实际上是一个通用公式,并不特定于我的项目业务。@PawanNogariya:它是通用公式。你能帮我做一件事吗?需求说结果是
0x598
是我必须开始读取数据的偏移量。你知道如何在C#中读取吗?我的意思是,如果它是十进制的,我可以读取它,但从我不知道的第个字节读取