Преобразование между десятичными, шестнадцатеричными и двоичными числами
lDec = 121
aHex = Hex$(lDec) ' Десятичное в шестнадцатеричное
lDec = Val("&H" & aHex) ' Шестнадцатеричное в десятичное
Обратите внимание, что не составляет труда преобразовать шестнадцатеричное значение в двоичное, поэтому, чтобы преобразовать из десятичного в шестнадцатеричное, удобней сперва преобразовать десятичное в двоичное. Наиболее быстрый способ двоичного преобразования, это использовать специальную таблицу преобразования.
Так же несложно сделать преобразование из двоичного значения в десятичное. Однако, это не всегда выполнимо, так как шестнадцатеричные и двоичные значения в VB могут представлять из себя намного большие размеры чем десятичное значение. Таким образом для преобразование из двоичного в шестнадцатеричное опять прибегнем к таблице преобразования, только другого типа.
vBinTable = Array("0000", "0001", "0010", "0011", _
"0100", "0101", "0110", "0111", _
"1000", "1001", "1010", "1011", _
"1100", "1101", "1110", "1111")
Dim i As Integer, k As Long
For k = 1 To Len(aHex)
' Шестнадцатеричное в двоичное
i = Val("&H" & Mid$(aHex, k, 1))
aBin = aBin & vBinTable(i)
Next
aBinTable = " 0000 0001 0010 0011 0100 0101 0110 0111" & _
" 1000 1001 1010 1011 1100 1101 1110 1111 "
aHexTable = "0123456789ABCDEF"
If Len(aBin) Mod 4 Then
' Делаем длину чётной 4
aBin = String$(4 - (Len(aBin) Mod 4), "0") & aBin
End If
aHex = ""
For k = 1 To Len(aBin) Step 4
i = InStr(aBinTable, " " & Mid$(aBin, k, 4))
aHex = aHex & Mid$(aHexTable, (i - 1) \ 5 + 1, 1)
NextОставить комментарий
Комментарии
' Делаем длину чётной 4
aBin = String$(Len(aBin) Mod 4, "0") & aBin
End If
Тут бы ошибочку поправить. Например:
If Len(aBin) Mod 4 Then
' Делаем длину чётной 4
aBin = String$(4 - (Len(aBin) Mod 4), "0") & aBin
End If