我试图从计算机向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
答案 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等。供参考: