如何将逗号分隔的十六进制值输入到文本框中并输出为十六进制值,c#

时间:2014-12-18 09:40:24

标签: c# textbox hex windows-forms-designer

这是我到目前为止提出的代码,但是当我输入一个字母值如AA时,它会抛出此异常。

“mscorlib.dll中发生了'System.FormatException'类型的未处理异常附加信息:输入字符串的格式不正确。”

如果用户输入无效值,我还想包含一些错误消息。任何帮助都会很棒,谢谢。

               private void GPIO_Click(object sender, EventArgs e)
                {
                    string hex = WriteValue.Text;
                    string[] hex1 = hex.Split(',');
                    byte[] bytes = new byte[hex1.Length];

                    for (int i = 0; i < hex1.Length; i++)
                    {
                        bytes[i] = Convert.ToByte(hex1[i]);
                    }

                    for (int i = 0; i < hex1.Length; i++)
                    {
                    GPIO(h[index], dir, bytes[i]);
                    ReadValue.Text += bytes[i].ToString();
                    }
                 }

2 个答案:

答案 0 :(得分:2)

您需要使用base设置为16(十六进制)来调用它。

Convert.ToByte(text, 16)

许多重复:

c# string to hex , hex to byte conversion

How do you convert Byte Array to Hexadecimal String, and vice versa?

答案 1 :(得分:1)

到达时

bytes[i] = Convert.ToByte(hex1[i]);

hex1[i]的值为"AA"

你的应用程序在这里失败了,因为你无法适应&#34; AA&#34;作为单个字节中的字符串。

如果您正在寻找字符串的字节数组转换, 你会想把这个值分成字符;像这样:

  string hex = "AA";
  string[] hex1 = hex.Split(',');
  List<byte[]> byteArrays = List<byte[]>();

  foreach (string t in hex1)
  {
        int byteIndex = 0;
        byte[] newArray = new byte[hex1.Length];
        foreach(char c in t)
        {
              newArray [byteIndex] = Convert.ToByte(c);
              byteIndex++;
        }
        byteArrays.add(newArray);
  }

但我并不认为这是你追求的目标。您正在寻找解析表示为字符串的十进制值。