2016-08-19 20 views
0

我對C#和使用VS都很陌生,但需要一點幫助。將文本框數據轉換爲字節然後發送到串口(反之亦然)

我有一個用戶可以輸入值的文本框,例如"658"。在發送到串口之前,我想要convert this into bytes first (max 3 bytes)。所以發送的第一個字節是0x02,發送的第二個字節是0x92

我有問題的第二件事是相同的,但相反。我以字節接收數據,for example "0x0B, 0xC7, 0x14"然後我需要將它們轉換爲十進制值並將它們顯示在不同的文本框中。

我嘗試了一些似乎沒有工作的轉換(解析,Tobyte,甚至使用二進制轉換器),所以我需要幫助。

感謝

+0

你能告訴我們你對自己試過..讓你累了谷歌搜索'C#轉換文成Bytes'我就從那裏開始。 。然後寫東西,然後回來,當你有東西顯示你有什麼問題時。'這不是一個代碼工廠網站' – MethodMan

回答

1

這應該讓你開始:

轉換從數字到字節:

var textInput = "658"; 
// validate... 
var numericInput = Convert.ToInt32(textInput); 
var convertedToBytes = BitConverter.GetBytes(numericInput); 
// if your system is little endian (see below), reverse array output. 

轉換從字節到數字:

// fourth octet is required to convert to an int32, which requires 4 bytes. 
var bytesInput = new byte[] { 0x0, 0x0B, 0xC7, 0x14 }; 
// if your system is little endian (see below), reverse array. 
var convertedFromBytes = BitConverter.ToInt32(bytesInput, 0); 

請注意,你要注意endian-ness。看到這個:https://msdn.microsoft.com/en-us/library/bb384066.aspx

+0

謝謝,但是當我嘗試通過串行端口發送字節數組時,我收到了錯誤信息。'{ txString = tbTX.Text; var numericInput = Convert.ToInt32(txString); var convertedToBytes = BitConverter.GetBytes(numericInput); mySerialPort.Write(convertedToByte); }' – Graham

+0

我不知道該如何處理這些信息。 –

0

這應該不是一個問題,因爲發送和接收串行端口都會接受/返回一個字節數組。所以問題歸結爲你如何從一個字符串創建一個數組。

byte[] bytes = Encoding.ASCII.GetBytes(textBox1.Text); 

回去的路上爲:

string s = Encoding.ASCII.GetString(bytes); 
+0

好吧,從ASCII到字節的轉換似乎工作正常,但我認爲我現在有編碼的問題。從閱讀其他論壇看來,串行端口首先需要正確的編碼。什麼是正確的編碼使用? – Graham

相關問題