2012-10-10 50 views
1

我試圖從一臺計算機發送到PIC單字節(注:PIC只接受否則將只接受數據的第一個字節一個字節發送)VB.Net發送UDP小數

這應該不是什麼大問題,因爲我只想管理總共8個LED,所以我只需要它從0到255,但我遇到了這個問題。 如果我嘗試爲值1發送到PIC我的程序發送31,如果我嘗試發送5將其發送35如果我嘗試發送255把它發送3 * * 3 * * 3 * *因此,我嘗試發送的每個數字都在其前面添加了3。我使用下面的代碼來確定值併發送它:

 Dim t As Integer = 0 
    Dim result As Integer = 0 
    For Each chk As CheckBox In GroupBox1.Controls 
     If chk.Checked = True Then 
      result = result + 2^t 
     End If 
     t = t + 1 
    Next 
    publisher.Connect(IPTo, PortTo) 
    Dim sendbytes() As Byte = ASCII.GetBytes(result) 
    publisher.Send(sendbytes, sendbytes.Length) 

我認爲問題是與轉換爲ASCII。

我也嘗試接收來自PIC的投入到我的電腦爲了這個,我有一個計時器內部下面的腳本:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
     Try 
      Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0) 
      Dim rcvbytes() As Byte = subscriber.Receive(ep) 

      Dim translate As String 
      translate = System.BitConverter.ToInt32(rcvbytes, 0) 

      TBRcv.Text = translate 
     Catch ex As Exception 
     End Try 
    End Sub 
+1

順便說一句,如果你設置'選項顯式On'和'選項推斷Off',你會看到爲什麼這個代碼不起作用。 – hometoast

+0

如果您在收到數據時遇到問題,請確保您已收到您發送的所有*字節。如果這個提示沒有幫助;最好問一個[新問題](http://stackoverflow.com/questions/ask)。 – hometoast

回答

3

ASCII.GetBytes需要一個字符串(用ASCII編碼)。給它一個Int32沒有任何意義。

退房System.BitConverter.GetBytes()System.BitConverter.ToInt32()(供接收端)

因此,只有你需要做出改變是:

Dim sendbytes() As Byte = BitConverter.GetBytes(result) 

進一步討論: 現在的情況是,你的結果(假設5)首先轉換爲字符串(現在是「5」),則ASCII.GetBytes現在將返回具有單個值0x35的字節數組,因爲Asc(「5」)是0x35。

+0

好吧,我收到了一些很好的數據。但這意味着我還需要在接收部分有一個轉換器,這將會是一個問題,但我認爲我將能夠管理 –

+0

'Asc()'轉換單個字符。 'ASCII.GetChars()'返回許多字符。 我不知道從哪裏開始你的錯誤包裝錯誤。我使用這種方法通過UDP連接發送了許多不同類型的數據而沒有問題。 – hometoast

+0

那麼它適用於大多數的部分,但只要價值高於63我得到這個錯誤。數據發送也從01000000開始,不應該從01開始? –

1

字符1的ASCII值是0X31等以供參考:

enter image description here