繁体   English   中英

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

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

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

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

在此处输入图像描述

并且必须从这个公式中计算值,对于给定的例子是这样解释的

字节 5 - LSB,字节 6 MSB。 在示例中,偏移量将为 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 相同)。

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

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

如果您在 C# 中进行数学运算,您可能会看到结果为 integer,即 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 架构字节序

BitConverter.ToUInt16

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM