Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查缓冲区中的特定位是否在C中设置#_C# - Fatal编程技术网

C# 如何检查缓冲区中的特定位是否在C中设置#

C# 如何检查缓冲区中的特定位是否在C中设置#,c#,C#,我有一个c#代码,它将十六进制代码写入设备的端口。设备回复端口,我读了他的答案,我把它转换成十六进制并显示在文本框中。 所以,现在我必须检查答案中的每一位,并在文本框或类似的东西中显示一条消息 有人能帮我吗 提前感谢。按位和您要检查的位的响应: Byte response = (Byte)0xFF; Boolean isBitOneSet = (response & 0x1) > 0; Boolean isBitTwoSet = (response & 0x2) >

我有一个c#代码,它将十六进制代码写入设备的端口。设备回复端口,我读了他的答案,我把它转换成十六进制并显示在文本框中。 所以,现在我必须检查答案中的每一位,并在文本框或类似的东西中显示一条消息

有人能帮我吗


提前感谢。

按位和您要检查的位的响应:

Byte response = (Byte)0xFF;
Boolean isBitOneSet = (response & 0x1) > 0;
Boolean isBitTwoSet = (response & 0x2) > 0;
Boolean isBitThreeSet = (response & 0x4) > 0;
或使用右移:

Boolean isBitFiveSet = ((response >> 4) & 0x1) > 0;

if(isBitFiveSet) System.Windows.MessageBox.Show("Five is set");

按位和您要检查的位的响应:

Byte response = (Byte)0xFF;
Boolean isBitOneSet = (response & 0x1) > 0;
Boolean isBitTwoSet = (response & 0x2) > 0;
Boolean isBitThreeSet = (response & 0x4) > 0;
或使用右移:

Boolean isBitFiveSet = ((response >> 4) & 0x1) > 0;

if(isBitFiveSet) System.Windows.MessageBox.Show("Five is set");
若你们需要一个数字的二进制表示,你们可以使用这个方法——它比单独检查每一位要简单和有效得多。这个方法可以转换成二进制和十六进制格式-你喜欢什么都行。

如果你需要一个数字的二进制表示,你可以使用这个方法-它比单独检查每一个位要简单和有效得多。此方法可以转换为二进制和十六进制格式-任何您喜欢的格式

namespace read_display_data
{ 公共部分类Form1:Form {

{ 公共部分类Form1:Form {


费迪南德已经描述了检查单个比特的方法,但可能还不够清楚

因此,要检查每个字节中的每一位,应按如下方式将代码变白:

StringBuilder message = new StringBuilder();
for (int byteNum = 0; byteNum < bytes.Length; byteNum++)
{
  var responseByte = bytes[byteNum];
  for (int bitPos = 0; bitPos < 8; bitPos++)
  {
    message.AppendFormat("Byte {0} bit {1} value is {2}", byteNum, bitPos, (responseByte & (1<<bitPos)) != 0);
  }
}
StringBuilder消息=新建StringBuilder();
for(int byteNum=0;byteNummessage.AppendFormat(“字节{0}位{1}值为{2}”)、byteNum、bitPos、(responseByte&(1Ferdinand)已经描述了检查单个位的方法。不过可能还不够清楚

因此,要检查每个字节中的每一位,应按如下方式将代码变白:

StringBuilder message = new StringBuilder();
for (int byteNum = 0; byteNum < bytes.Length; byteNum++)
{
  var responseByte = bytes[byteNum];
  for (int bitPos = 0; bitPos < 8; bitPos++)
  {
    message.AppendFormat("Byte {0} bit {1} value is {2}", byteNum, bitPos, (responseByte & (1<<bitPos)) != 0);
  }
}
StringBuilder消息=新建StringBuilder();
for(int byteNum=0;byteNum
message.AppendFormat(“字节{0}位{1}值为{2}”)、byteNum、bitPos,(responseByte&(1)您研究过位运算符了吗?(
等)确实-您尝试了什么?我尝试将响应保存在缓冲区中,并将十六进制字符串转换为二进制字符串。我检查了缓冲区中的每一位,但无法显示所需的消息(例如,如果第三位为1,则串行通信正常,否则串行通信错误)是的,我在那里查看了。我的问题是如何在将位x设置为ok的条件和在文本框中显示“ok”消息之间建立链接?您是否查看了位运算符?(
&
等)确实-您尝试了什么?我尝试将响应保存在缓冲区中,并将十六进制字符串转换为二进制字符串。我检查了缓冲区中的每一位,但无法显示所需的消息(例如,如果第三位为1,则串行通信正常,否则串行通信错误).是的,我看了那里。我的问题是如何在位x设置为ok的条件和显示“ok”之间建立链接文本框中的消息?我不需要二进制表示,我必须检查每个字节中的每个位。我从设备中得到的答案有13个十六进制字节,所以我必须检查104位。我必须做2个思考:1.首先我必须检查每个比特2.其次我想在文本框中显示一条消息,如果第二个或第三个等比特设置为ok或not ok(如果x位设置为1“串行通信正常,否则串行通信错误等”),则我同意Ferdinand的建议。但最好将“>0”替换为“!=0”。因为如果你检查一次整数,就可以得到负值。谢谢你的回答Oleksandr。我仍然有问题。我在这里发布了我的c#代码。非常感谢你的帮助。我不需要二进制表示,我必须检查每个字节的每个位。我的设备回答有13个十六进制字节,所以我必须检查104位s、 我必须做2个思考:1.首先我必须检查每一次咬合2.其次我想在文本框中显示一条消息,如果第二次或第三次咬合正常或不正常(如果x咬合设置为1“串行通信正常,否则串行通信错误等”),那么我同意Ferdinand的建议。但最好将“>0”替换为“!=0”。因为如果你检查一次整数,就可以得到负值。谢谢你的回答Oleksandr。我仍然有问题。我在这里发布我的c#代码。非常感谢你的帮助。非常感谢你的帮助Ferdinand,但是System.Windows.MessageBox.Show不能帮助我。我想显示“”设置了五位“在我的GUI中的特定文本框中。myTextBox.text=“设置了五位”;我仍然有问题。我将在这里展示我的代码,也许你可以帮助我更多。非常感谢你的帮助Ferdinand,但是System.Windows.MessageBox.Show不帮助我。我想在我的GUI中的特定文本框中显示“设置了五位”。myTextBox.text=“设置了五位”“我仍然有问题。我会在这里展示我的代码,也许你能帮我更多这是我的c代码,我仍然有问题。有人能帮我吗?你能描述一下你的新问题吗?在你的第一篇帖子中,你说你不能将二进制转换成字符串。我想现在应该可以了。”(但不确定它是否是PadLeft和PadRight的最有效实现)。那么,有什么不能按预期工作?您确定“port_DataReceived”吗方法调用?文本框1中是否出现任何内容?我在文本框中收到来自设备的响应。这认为是正常的。响应是长度为13的十六进制。我想检查十六进制中每个字节的每个位,如果位已设置,则在另一个文本框中显示ok消息,如果位未设置,则显示error消息。我不知道转换是否是d的最佳方式o也解决我的问题。我正在考虑用掩码来解决它,但如果我想检查每个字节的每一位,我必须制作大量的掩码…我真的不知道如何有效地处理。知道我的代码是这样做的:当我按下Send按钮时,写入端口1,该端口设置为十六进制:0x55,0x