从串口接收数据时按原样读取十六进制值
Read hex values as is when receiving data from serial
我有一个 ,这意味着如果我发送 A0 02 50 0E
,接收方应该收到 A0 02 50 0E
作为十六进制。由于 StackOverlfow,它现在工作正常。
我现在的问题是 接收十六进制数据并将其转换为与该十六进制等效的字符串 ,这意味着如果我接收到十六进制 A0 03 82 04 D7
我的系统可以接收它作为 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
是正确的十进制值,唯一的问题是前 2 位数字 63
。
我的方法是先将其转换为十进制值,然后将其从十进制转换为等效的十六进制值,然后将其设为字符串,但我不确定它是否可行。
编辑:感谢伊恩,我现在取得了进步。
它现在工作,我只是有一个 problem.Whenever 我发送 A0038204D7
然后我的系统收到 3F 03 3F 04 3F
这是部分错误的 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)
这是 console.writeline
中的输出:
Result 3F 02 50 0E
对您收到的每个字节使用 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
我有一个 A0 02 50 0E
,接收方应该收到 A0 02 50 0E
作为十六进制。由于 StackOverlfow,它现在工作正常。
我现在的问题是 接收十六进制数据并将其转换为与该十六进制等效的字符串 ,这意味着如果我接收到十六进制 A0 03 82 04 D7
我的系统可以接收它作为 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
是正确的十进制值,唯一的问题是前 2 位数字 63
。
我的方法是先将其转换为十进制值,然后将其从十进制转换为等效的十六进制值,然后将其设为字符串,但我不确定它是否可行。
编辑:感谢伊恩,我现在取得了进步。
它现在工作,我只是有一个 problem.Whenever 我发送 A0038204D7
然后我的系统收到 3F 03 3F 04 3F
这是部分错误的 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)
这是 console.writeline
中的输出:
Result 3F 02 50 0E
对您收到的每个字节使用 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