Vb6 理解这个VB代码

Vb6 理解这个VB代码,vb6,Vb6,有人能试着把他们的大脑围绕在这个上面吗?我认为这只是确保十六进制字节中有2个字节,并确保值在0-9和A-F之间,但不是 用于红外控制器/爆炸机的程序片段。该子程序将实际信号(或其他代码)从串行端口发送到控制器,以便其完成任务 电话示例: SendCode ("04241001") VB6代码表示: Public Sub SendCode(ByVal strOut As String) ' **************************** ' This sub sends the hex

有人能试着把他们的大脑围绕在这个上面吗?我认为这只是确保十六进制字节中有2个字节,并确保值在0-9和A-F之间,但不是

用于红外控制器/爆炸机的程序片段。该子程序将实际信号(或其他代码)从串行端口发送到控制器,以便其完成任务

电话示例:

SendCode ("04241001")
VB6代码表示:

Public Sub SendCode(ByVal strOut As String)
' ****************************
' This sub sends the hex codes
' ****************************


Dim numb1 As Integer, numb2 As Integer
Dim strRS As String
Dim i As Long
Dim newline(200) As String, outline(200) As String

Debug.Print "Sending IR - " & strOut

    strRS = vbNullString

    For i = 1 To Len(strOut)
        newline(i) = Mid(strOut, i, 1)
    Next

    For i = 1 To Len(strOut) Step 2
        If Asc(newline(i)) < 64 Then
            numb1 = (Asc(newline(i)) - 48) * 16
            strRS = strRS + Format(Hex(numb1 / 16), "0")
        Else
            numb1 = (Asc(newline(i)) - 55) * 16
            strRS = strRS + Format(Hex(numb1 / 16), "0")
        End If
        If Asc(newline(i + 1)) < 64 Then
            numb2 = (Asc(newline(i + 1)) - 48)
            strRS = strRS + Format(Hex(numb2), "0")
        Else
            numb2 = (Asc(newline(i + 1)) - 55)
            strRS = strRS + Format(Hex(numb2), "0")
        End If
        numb1 = numb1 + numb2
        outline((i + 1) \ 2) = CByte(numb1)
        strRS = strRS + " "
    Next

    With MSComm1
        .RTSEnable = True
        Sleep (20)
        .OutBufferCount = 0
        For i = 1 To (Len(strOut) / 2)
            .Output = Chr(outline(i))
        Next
        Sleep (20)
        .RTSEnable = False
    End With

End Sub
公共子发送代码(ByVal strOut作为字符串)
' ****************************
'此接头发送十六进制代码
' ****************************
Dim numb1为整数,numb2为整数
作为字符串的Dim STRR
我想我会坚持多久
标注换行符(200)为字符串,轮廓线(200)为字符串
调试。打印“发送IR-”和strOut
strRS=vbNullString
对于i=1至Len(strOut)
换行符(i)=中间(strOut,i,1)
下一个
对于i=1至Len(strOut)步骤2
如果Asc(换行符(i))<64,则
numb1=(新行(i))-48)*16
strRS=strRS+格式(十六进制数字1/16,“0”)
其他的
numb1=(新行(i))-55)*16
strRS=strRS+格式(十六进制数字1/16,“0”)
如果结束
如果Asc(换行符(i+1))<64,则
numb2=(Asc(换行符(i+1))-48)
strRS=strRS+格式(十六进制(数字2),“0”)
其他的
numb2=(Asc(换行符(i+1))-55)
strRS=strRS+格式(十六进制(数字2),“0”)
如果结束
numb1=numb1+numb2
轮廓((i+1)\2)=CByte(numb1)
strRS=strRS+“”
下一个
使用MSComm1
.RTSEnable=True
睡眠(20)
.ExputfferCount=0
对于i=1至(长(短)/2)
.Output=Chr(大纲(i))
下一个
睡眠(20)
.RTSEnable=False
以
端接头

这个问题是基于第二个For/Next循环的步骤2和嵌入的IF语句。环路内部发生了什么? numb1和numb2


此循环的目的是什么?

它将十六进制字符串转换为二进制字节字符串,然后发送二进制字节字符串。
它还将二进制字节转换回十六进制(strRS),以便您可以检查转换和输出。check/debug字符串不用于任何用途,但如果在其中设置断点,则可以检查值。

据我所知,
strRS
无效。@muratgu很可能用于调试。我敢打赌原始作者在某个时候有另一个debug.print用于该值。好的,让我们假设strRS用于调试。循环中发生了什么?再次您好,我想我找到了一个.net函数。它被称为位转换器。例如,serialport在数组中存储数据并将其转换为字符串。。。如果st是一个字符串,Buffer=Buffer中的所有字节,那么“st=Bitconverter.ToString(Buffer)”将显示十六进制。希望我正确地解释了这一点,并对其他人有所帮助。