VB.NET串行端口读取十六进制数据并插入文本框

VB.NET串行端口读取十六进制数据并插入文本框,vb.net,winforms,rfid,Vb.net,Winforms,Rfid,我想从连接在我的一个com端口上的UHF RFID阅读器读取数据,数据应该是十六进制,并且必须是完整的十六进制,应该粘贴在我在VB.NET中制作的windows窗体应用程序的文本框中 请帮助我,我是VB.NET编程新手。我需要一个VB.NET代码来完成此任务: 我的代码: Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load For Each s In

我想从连接在我的一个com端口上的UHF RFID阅读器读取数据,数据应该是十六进制,并且必须是完整的十六进制,应该粘贴在我在VB.NET中制作的windows窗体应用程序的文本框中

请帮助我,我是VB.NET编程新手。我需要一个VB.NET代码来完成此任务:

我的代码:

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   For Each s In System.IO.Ports.SerialPort.GetPortNames() 
        ComboBox1.Items.Add(s)
    Next s

End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If ComboBox1.SelectedIndex = -1 Then
        MessageBox.Show("Please select a port")
        Exit Sub
    Else
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Parity = IO.Ports.Parity.None
        SerialPort1.StopBits = IO.Ports.StopBits.One
        SerialPort1.PortName = ComboBox1.SelectedItem.ToString
        SerialPort1.Open()
    End If
End Sub

Private Shared buffer As String = ""

Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

    Try
        Dim rcv As String = _SerialPort1.ReadExisting()
        buffer = String.Concat(buffer, rcv)


        Dim hexVal As Integer
        hexVal = Convert.ToInt32(rcv, 16) '16 specifies the base

        txtReceived.Text = hexVal

    Catch ex As Exception
    End Try

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    SerialPort1.Close()

End Sub
下课了我明白你的问题了

线路

hexVal = Convert.ToInt32(c, 16) '16 specifies the base
正在尝试将字符转换为int32,但函数假定传入值已为十六进制,并且您得到的答案完全错误

顺便说一下,您的数据是8位二进制数据,串行端口读取器将每个8位作为字符类型读取

您需要的是使用VB内置函数
Hex
,该函数接受整数/字节(在本例中为每个字符的ascii码),并以字符串形式返回十六进制值

Dim x As Integer = 15
Dim s As String = hex(x)
将为字符串指定“F”

一切都很好。但是,如果需要2位十六进制字符串,则需要检查返回的字符串是否只有一个字符,如果是,则在开头添加一个“0”

那么,你的台词

Dim hexVal As Integer
hexVal = Convert.ToInt32(rcv, 16) '16 specifies the base
txtReceived.Text = hexVal
应替换为

Dim hexVal As string =""
For Each c As Char In rcv
    hexVal = heval & AsciiCharToHexSring(c)
Next
txtReceived.Text = hexVal
并添加此函数以转换字符,必要时添加“0”

Private Function AsciiCharToHexSring(s As Char) As String
    Dim hexdigit As String = Hex(Asc(s))
    If hexdigit.Length = 1 Then
        hexdigit = "0" & hexdigit
    End If
    Return hexdigit
End Function

如果您不需要每次都使用2位十六进制数,只需删除
If..End If
块即可。不幸的是,我们不是一个编码服务。向我们展示您迄今为止的尝试。我说得对吗,您想将缓冲区转换为ASCII十六进制代码?我想接收十六进制而不是ASCII,但我的代码不起作用,可能是我的代码中有错误。然后,您必须循环字符串(提示:
将每个c作为缓冲区中的字符,然后将每个字符转换为ascii码,并将ascii码转换为十六进制。我认为这相当简单。基本上,我想读取RFID卡的十六进制并将此十六进制粘贴到文本框中。仅此而已……虽然这看起来很简单,但在VB中我无法做到。NETNow,我50%的问题已经得到解决lved。我在文本框中获得十六进制,但我面临更多问题。我的代码如下:问题如下:1.SerialPort1.ReadLine未从UHF RFID阅读器2.SerialPort1.ReadExisting()读取任何数据正在从UHF RFID读卡器读取数据,但所有数据都不在一个文本框中,一些字节出现在第一个文本框中,并保留到第二个文本框3。我创建了两个文本框->一个用于用户RFID标签ID->一个用于书籍RFID标签ID4。当用户刷卡时st RFID卡的完整十六进制应插入名为“txtReceived1”的第一个文本框内,之后当用户刷卡另一个RFID卡时,其完整十六进制应插入名为“txtReceived2”的第二个文本框内5。卡的完整十六进制长度为21字节,例如(CC FF FF 10 32 0D 01 E200 10 26 77 0D 01 23 30 23 55 2D),我想在文本框中分别读取第一个文本框和第二个文本框中的用户标签ID和书籍标签ID的完整20个字节。我面临的第二个主要问题是一些接收到的字节被更改(更改),特别是前3个字节而不是接收(CC FF FF)实际接收到的数据是(3F 3F 3F 3F),第8个字节也会在每次接收时更改,而不是在接收时(E2)我的com端口正在接收(3F)与第19个字节的情况相同,因此简而言之,虽然数据正在接收,但其部分字节会更改