2016-12-05 76 views
1

我想知道如何繼續以便將一些字符串寫入字節數組的一個字節(在MS Visual中運行C#WinForms 2015社區版)。將字符串變量寫入字節數組的一個字節,如字節[6] =「c6」

我有一個控制板,控制步進電機。爲了通過SerialPort向電機發送命令,電路板需要一個長度爲9的字節數組。

在陣列的每個字節中都存儲了一個信息(如電路板地址,電機編號等)最後3個字節在這個陣列中是爲了速度。從生產者隨附的程序的源代碼中,有時我需要發送的信息如下所示:「b0」,「bc」,「a7」等。我如何將它寫入所需的數組中地點。目前,我有這樣的:

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); 
} 

如果我在正常數字從0到99在字節6-9電動機按預期運行。但更高的速度有字符串值。爲什麼這些變量看起來是他們看起來的樣子,後面我會想到,但是從我現在的計劃來看,手動輸入應該沒問題,因爲電機只能以一種速度運行。

到目前爲止,我完整的代碼並編譯,但發送後我得到:

FormatExceptionError {「Inputstring有格式錯誤。」}

我發現瞭如何將完整的字符串轉換問題成一個完整的字節數組,但這些並沒有真正幫助我。

+0

@TripleEEE:[**當然它**](https://msdn.microsoft.com/en-us/library/c7xhf79k(V = vs.110)的.aspx)。 –

+0

爲什麼你需要它作爲字符串?其餘的位置顯然是用字節填充的。 –

+0

@TripleEEE:[**其實它也有**](https://msdn.microsoft.com/en-us/library/y57wwkzk(v = vs.110).aspx)。 –

回答

4

那些不是字符串值。它們是每個字節的hexadecimal表示。使用0x作爲前綴來指示十六進制值。

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

非常感謝,完美的工作和電機正在轉動,因爲我想。我認爲十六進制是非常長的價值,因此我雖然是一些字符串=) –

4

您需要輸入字符串的specify the base

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

基地16是十六進制。

+0

非常感謝,工作得很好,但我使用了其他答案中提到的0x前綴。 –

+0

@ChristophPoser:那麼你應該將其標記爲接受的答案。 –