如何使用 C# 检查字节中的单个位



我想使用 C# 检查收到的串行通信字节中的单个位是高还是低

我试图写这样的东西:

if(BoxSerialPort.ReadByte() & 0x01)

if(Convert.ToByte(BoxSerialPort.ReadByte()) & 0x01)

编译器发送此错误:

错误 CS0029 无法将类型"int"隐式转换为"bool">

我该如何解决这个问题?

使用&运算符

if ((BoxSerialPort.ReadByte() & 0x01) != 0)
...

&运算符检查两个整数值的每个位,并返回一个新的结果值。

假设您的BoxSerialPort43,这将以二进制形式0010 1011

0x01或简单地说1是二进制0000 0001

&比较每个位,如果两个操作数中都设置了相应的位,则返回1,如果没有,则返回0

0010 1011

&

0000 0001

=

0000 0001(1为普通整数)

您的 if 语句现在检查if (1 != 0)这显然是正确的。0x01位在变量中设置。&运算符通常可以很好地确定位是否设置为整数值。

我会使用 compareTo

using System;
//byte compare 
byte num1high = 0x01;
byte num2low = 0x00;

if (num1high.CompareTo(num2low) !=0)
Console.WriteLine("not low");
if (num1high.CompareTo(num2low) == 0)
Console.WriteLine("yes is low");
Console.WriteLine(num1high.CompareTo(num2low));
Console.WriteLine(num1high.CompareTo(num1high));
Console.WriteLine(num2low.CompareTo(num1high));

输出:

not low
1
0
-1

相关内容

  • 没有找到相关文章

最新更新