c# 如何将字节除以数字

问题描述 投票:0回答:1

我正在用C#编程语言开发Modbus通信模块,

如果与modbus协议通讯过程中出现异常,

返回错误码,为十六进制值,

以错误码格式为0x84为例

0x80 -> 标头

0x04 -> 身体

其格式与

相同

所以我想将 0x84 除以 0x80 和 0x04

有什么资料可以参考吗?

c# modbus
1个回答
0
投票

如果我正确地阅读了这个问题,那么您是在问如何执行位屏蔽。您没有十六进制值。十六进制只是以书面形式表示数字的多种方式之一。你只有一个字节,即一个 8 位数字。您问的是如何分离低阶和高阶 4 位。您可以使用位掩码来做到这一点。您可以使用按位 AND 运算来屏蔽前四位或后四位,如下所示:

byte n1 = 0x84;
byte m1 = 0x0F;
byte m2 = 0xF0;
byte n2 = (byte)(n1 & m1);
byte n3 = (byte)(n1 & m2);

Console.WriteLine($"{Convert.ToString(n1, 2).PadLeft(8, '0')} 0x{n1.ToString("X2")}");
Console.WriteLine($"{Convert.ToString(m1, 2).PadLeft(8, '0')} 0x{m1.ToString("X2")}");
Console.WriteLine($"{Convert.ToString(m2, 2).PadLeft(8, '0')} 0x{m2.ToString("X2")}");
Console.WriteLine($"{Convert.ToString(n2, 2).PadLeft(8, '0')} 0x{n2.ToString("X2")}");
Console.WriteLine($"{Convert.ToString(n3, 2).PadLeft(8, '0')} 0x{n3.ToString("X2")}");

其输出如下:

10000100 0x84
00001111 0x0F
11110000 0xF0
00000100 0x04
10000000 0x80

我不会解释位屏蔽如何工作的细节。它基本上只是位上的布尔逻辑,因此,如果您不明白这一点,您应该先阅读布尔逻辑,然后再阅读按位逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.