2013-08-20 3 views
0

Может кто-нибудь попробовать обернуть мозг вокруг этого? Я думал, что это просто обеспечение наличия двух байтов в шестнадцатеричном байте и обеспечение значений между 0 -9 и A-F, но нет.понимание этого кода VB

Фрагмент программы, которая предназначена для инфракрасного контроллера/бластера. Эта подпрограмма отправит фактические сигналы (или другие коды) из последовательного порта в контроллер, чтобы он выполнил задание.

Пример вызова:

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 

Вопрос основан вокруг второй для/Следующий цикла с шагом 2 и встроенный IF заявления. Что происходит внутри цикла? numb1 и numb2

Какова цель этого цикла?

+0

Насколько я могу судить, 'strRS' не имеет никакого эффекта. – muratgu

+0

@muratgu Вероятно, для отладки. Я бы поставил на то, что у оригинального автора в какой-то момент был еще один debug.print для этого значения. –

+0

Хорошо, давайте предположим, что strRS предназначен для отладки. Что происходит в цикле? – Eddiie

ответ

1

Он преобразует шестнадцатеричную строку в двоичную байтовую строку, а затем отправляет двоичную байтовую строку. Он также преобразует двоичные байты обратно в hex (strRS), чтобы вы могли проверить преобразование и вывод. Строка проверки/отладки не используется ни для чего, но если вы поместите точку останова там, вы можете проверить значения.

+0

Здравствуйте, еще раз, я думаю, что для этого я нашел функцию .net. Он называется Bitconverter. Например, serialport хранит данные в массиве и преобразует их в строку ... если st - это строка, а Buffer = все байты в буфере, тогда «st = битконвертер. ToString (Buffer)» показывает мне hex. Надеюсь, я объяснил это правильно, и это помогает кому-то другому. – Eddiie

Смежные вопросы