1

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

这应该不是什么大问题,因为我只想管理总共 8 个 LED,所以我只需要它从 0 到 255,但我在实现这一点时遇到了问题。如果我尝试将值 1 发送到 pic 我的程序发送 31 如果我尝试发送 5 它发送 35 如果我尝试发送 255 它发送 3* 2 *3* 5 *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
4

2 回答 2

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。

于 2012-10-10T17:30:34.310 回答
1

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

在此处输入图像描述

于 2012-10-10T17:33:49.680 回答