将字符串变量写入字节数组的一个字节,如字节[6] =" c6"

时间:2016-12-05 09:50:06

标签: c# arrays string serial-port hex

我想知道如何将一些字符串写入字节数组的一个字节(在MS Visual 2015社区版中运行C#WinForms)。

我有一个控制步进电机的控制板。为了通过SerialPort向电机发送命令,电路板需要一个长度为9的字节数组。

在阵列的每个字节中都存储了一个信息(如电路板地址,电机编号等)。此数组中的最后3个字节用于速度。从制作人随附的程序的源代码中,有时我需要发送的信息如下:" b0"," bc"," a7&# 34;我怎样才能将它写入所需位置的数组中。目前,我喜欢这样:

private void button3_Click(object sender, EventArgs e)
{
    byte[] a = new byte[9];
    a[0] = 1;
    a[1] = 1;
    a[2] = 0;
    a[3] = 0;
    a[4] = 0;
    a[5] = 0;
    a[6] = 02;                     //could also be like "bc"
    a[7] = Convert.ToByte("bc");   // if its a number from 00 to
    a[8] = Convert.ToByte("c0");   // 99 the motor works as planned

    serialPort1.Write(a, 0, a.Length);
}

如果我在字节6-9中有0到99的正常数字,则电机按预期运行。但更高的速度有字符串值。为什么变量看起来像他们看起来的样子我稍后会弄清楚,但是从我的计划现在手动输入会很好,因为电机应该只以一种速度运行。

到目前为止,我的完整代码已编译,但发送后我得到:

  

FormatExceptionError {" Inputstring格式错误。"}

我发现了如何将完整的字符串转换为完整的字节数组的问题,但那些并没有真正帮助我。

2 个答案:

答案 0 :(得分:4)

您需要specify the base输入字符串:

a[7] = Convert.ToByte("bc", 16);
a[8] = Convert.ToByte("c0", 16);

Base 16是十六进制的。

答案 1 :(得分:4)

那些不是字符串值。它们是每个字节的hexadecimal表示。使用0x作为前缀来指示十六进制值。

a[7] = 0xBC;
a[8] = 0xC0;