VB.Net发送十进制udp

时间:2012-10-10 17:25:41

标签: vb.net udp decimal ascii

我试图从计算机向PIC发送一个字节(注意:pic只接受一个字节,否则它只接受数据发送的第一个字节)

这应该不是什么大问题,因为我只想管理总共8个LED,所以我只需要它从0到255,但我遇到了实现这个问题。 如果我尝试将值1发送到pic我的程序发送31如果我尝试发送5则发送35如果我尝试发送255它发送3 * 2 * 3 * 5 < / em> * 3 * 5 *因此对于我尝试发送的每一个数字,它都会在它前面添加一个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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

字符1的ASCII值为0x31等。供参考:

enter image description here