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

How to read a 16-bit number from a file in C#?

我有一个要求涉及某种程度的位操作。我没有位操作经验

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

并且必须根据这个公式计算值,对于给定的示例

byte 5 - LSB, byte 6 MSB. In example offset will be 598 (LSB * (MSB << 8))

对于给定的示例,他们是如何获得 598 分的?

我知道 LSB 是最低有效位,MSB 是最高有效位。

所以 8 是第 5 个字节的 LSB,0 是第 6 个字节的 MSB?

或者我必须将98和05转换为位,然后找出这两个值?

我想用 C# 编写此公式。

您不需要处理单个位。这些是十六进制值,因此 98 是一个字节,05 是一个字节。

看起来转换也有错误。您需要将 LSB 添加到移位后的 MSB,而不是相乘。 598 = 0x98 + (0x05 << 8)。 <<8 运算符将您的 MSB 移动一个字节(与乘以 256 相同)。

索引位置5的字节是:98(十六进制)
索引位置 6 处的字节为:05(十六进制)

在这种情况下,结果是 0598 或 589(十六进制)

如果您在 C# 中进行数学运算,您可能会看到结果是一个整数,即 1432。

MSB 也代表 Most significant byte.

    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 数组中读取两个字节,即 0x980x05。然后它将应用公式计算结果 0x0598.

公式取决于CPU架构Endianness

BitConverter.ToUInt16