如何从 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
数组中读取两个字节,即 0x98
和 0x05
。然后它将应用公式计算结果 0x0598
.
公式取决于CPU架构Endianness
我有一个要求涉及某种程度的位操作。我没有位操作经验
我必须从文件字节中选择第五和第六字节。
并且必须根据这个公式计算值,对于给定的示例
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
数组中读取两个字节,即 0x98
和 0x05
。然后它将应用公式计算结果 0x0598
.
公式取决于CPU架构Endianness