从串行接收数据时,按原样读取十六进制值

时间:2016-02-26 03:10:31

标签: vb.net serial-port hex receiver

我有一个system capable of sending hex commands as is,这意味着如果我发送A0 02 50 0E,接收方应该收到A0 02 50 0E十六进制。由于StackOverlfow,它现在工作正常。

我现在的问题是接收十六进制数据并将其转换为该十六进制的等效字符串,这意味着如果我收到十六进制A0 03 82 04 D7我的系统可以接收它作为字符串{ {1}}。

这是我的代码:在此示例中,我发送十六进制值 A0 03 82 04 D7

A0 03 82 04 D7

循环的结果

Dim s As String = ""
s += CStr(ComPort.ReadExisting)
'Just to check the output
Console.WriteLine("s: " & s) 'Outputs "s: ?P" instead of "s: P", this is my first problem

Dim result As String = Nothing
Dim c As Char = Nothing
For Each c In s
   Console.WriteLine("haha: " & c)

   Dim asd As String = Convert.ToUInt16(c).ToString("D2")


   Console.WriteLine("Uint16: " & Convert.ToUInt16(c).ToString("D2"))
   Console.WriteLine("Uint32: " & Convert.ToUInt32(c).ToString("D2"))
   Console.WriteLine("Uint64: " & Convert.ToUInt64(c).ToString("D2"))
   Console.WriteLine("Byte: " & Convert.ToByte(c).ToString("D2"))
   Console.WriteLine("Hex: " & c)

   result &= asd
Next
message_command(msg_usage_enum.serial_received_ascii, result)
Console.WriteLine(result) 'Output is 63028014

最后一个代码haha: ? Uint16: 63 Uint32: 63 Uint64: 63 Byte: 63 Hex: ? haha: Uint16: 02 Uint32: 02 Uint64: 02 Byte: 02 Hex: haha: P Uint16: 80 Uint32: 80 Uint64: 80 Byte: 80 Hex: P haha: Uint16: 14 Uint32: 14 Uint64: 14 Byte: 14 Hex: 部分正确,Console.WriteLine(result) 'Output is 63028014是正确的十进制值,唯一的问题是前两位是028014

我的方法是首先将其转换为十进制值,然后从十进制转换为十六进制等效值,然后将其转换为字符串,但我不确定它是否可行。

编辑:感谢Ian,我现在正在取得进展。

它现在正在工作,我只是遇到了问题。当我发送63时,我的系统会收到部分错误的A0038204D7 3F 03 3F 04 3F {{ 1}} 3F A0 ,发送82我的系统会收到D7除了 A002500E 之外,它是正确的。我的系统似乎无法处理其他系统,因此输出 3F 02 50 0E

这是我到目前为止的最新代码

3F

这是3F中的输出:

Dim bytes() As Byte = System.Text.Encoding.ASCII.GetBytes(ComPort.ReadExisting())

Dim strs As String() = (From b In bytes
                                        Select b.ToString("X2")).ToArray()
Dim str As String = String.Join(" ", strs)

Console.WriteLine("Result " & str)

1 个答案:

答案 0 :(得分:1)

对收到的每个字节使用ToString("X2")。您可以使用LINQ来执行此操作,并String.Join将它们组合起来:

Dim bytes As Byte() = {&HA0, &H3, &H82, &H4, &HD7}
Dim strs As String() = (From b In bytes
                    Select b.ToString("X2")).ToArray()
Dim str As String = String.Join(" ", strs)
'Your result is in str