在C#中,如何将一个单词或一个字母解释为一个数字?

在C#中,如何将一个单词或一个字母解释为一个数字?,c#,binary,word,microprocessors,C#,Binary,Word,Microprocessors,我不是来自低级开发背景,所以我不知道如何将下面的指令转换为整数 基本上我有一个微处理器,它告诉我哪些IO是活动的或非活动的。我向设备发送一个ASCII命令,它会回复一个单词,说明15个I/O中哪些是打开/关闭的。。。以下是说明: 装置回答“A0001/”仅适用于DIn0,回答“A???/”适用于所有激活输入 Awxyz/-w=0到中MSB的高半字节?ASCII字符0001=1,1111=?,z=LSB的低半字节 在一天结束时,我只想把它转换成一个数字,告诉我15个(或16个?)输入中哪一个是

我不是来自低级开发背景,所以我不知道如何将下面的指令转换为整数

基本上我有一个微处理器,它告诉我哪些IO是活动的或非活动的。我向设备发送一个ASCII命令,它会回复一个单词,说明15个I/O中哪些是打开/关闭的。。。以下是说明:

  • 装置回答“A0001/”仅适用于DIn0,回答“A???/”适用于所有激活输入
  • Awxyz/-w=0到中MSB的高半字节?ASCII字符0001=1,1111=?,z=LSB的低半字节
在一天结束时,我只想把它转换成一个数字,告诉我15个(或16个?)输入中哪一个是活动的

我有一些东西连接到第15个I/O端口,我得到的答复是“A8000”,如果这有帮助的话? 有人能帮我澄清一下吗?

您可以使用该类将字节数组转换为所需的整数格式

如果你得到的是16位

C#没有定义。这是由您运行的硬件决定的。英特尔和AMD处理器都是小端处理器。您可以使用以下工具了解平台的endian特性。如果运行.NET的计算机和提供数据的硬件没有相同的尾数,则必须交换这两个字节

byte[] inputFromHardware = { 126, 42 };
ushort value = BitConverter.ToUInt16( inputFromHardware, index );
15(或16?)个输入中的哪一个是激活的

如果这些位是硬件标志,那么所有16位都用来表示某种意义是合理的。当位用于表示有符号数时,其中一个位用于表示正数与负数。由于硬件提供状态位,因此任何位都不应被解释为符号

如果想知道特定位是否处于活动状态,可以使用位掩码和
&
运算符。例如,二进制掩码

0000 0000 0100

对应于十六进制数

0x0004

要了解右侧第三位是否已打开,请使用

bool thirdBitFromRightIsOn = (value & 0x0004 != 0);
更新

如果制造商说值8000(我假设十六进制)表示通道15处于活动状态,请如下所示:

  string x = "A0001/"
  int y = 0;
  for (int i = 3; i >= 0; i--)
  {
      if (x[4-i] == '1')
      y += (int)Math.Pow(2,i);
  }
你的口罩

1000 0000 0000 0000  (binary)
 8    0    0    0    (hex)
根据制造商提供的信息,最左边的位对应于通道15

您可以像这样使用该遮罩:

bool channel15IsOn = (value & 0x8000 != 0);
第二种选择(但仅适用于半字节)是使用数学库,如下所示:

  string x = "A0001/"
  int y = 0;
  for (int i = 3; i >= 0; i--)
  {
      if (x[4-i] == '1')
      y += (int)Math.Pow(2,i);
  }
使用将字符串视为字符数组的功能,只需使用括号,并通过强制转换将数字字符视为数字,就可以将位转换为硬编码的整数。
这是一个新手解决方案,但我认为它也是一个合适的解决方案。

我得到的第15个i/O的值是8000,这是如何工作的?从左边开始的第15个IO?你能把你用来计算8000的代码加到你的问题上吗?是的,从左边开始。我有一组16个输入通道(0-15),当我收到电信号时,设备返回“A8000”。“A”只是他们使用的标准。当我问制造商时,他们说8000是15频道,这是正确的,但当他们试图解释他们是如何得到答案时,我真的很困惑……谢谢巴德,感谢你的帮助。当你说
“A8000”
,这是一个字符串吗?或者,“A”从何而来?“A”只是制造商用来表示replyOk的标准,因此每个字符代表四个端口。通常,使用十六进制数字对这些端口的16种可能组合进行编码是有意义的,因此
0-9A-F
。但是您似乎有
1111=?
,我希望是
1111=F
。例如,
0101
(端口0和3处于活动状态)提供了什么?