我想使用 C# 检查收到的串行通信字节中的单个位是高还是低
我试图写这样的东西:
if(BoxSerialPort.ReadByte() & 0x01)
或
if(Convert.ToByte(BoxSerialPort.ReadByte()) & 0x01)
编译器发送此错误:
错误 CS0029 无法将类型"int"隐式转换为"bool">
我该如何解决这个问题?
使用&
运算符
if ((BoxSerialPort.ReadByte() & 0x01) != 0)
...
&
运算符检查两个整数值的每个位,并返回一个新的结果值。
假设您的BoxSerialPort
是43
,这将以二进制形式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