Статьи
к пособию-самоучителю on-line
"Visual Basic с нуля"
|
|||
Шестнадцатеричное представление числа. Перевод из шестнадцатеричной системы счисления в десятичную. | |||
Дата создания 03.06.2005 {Автор 4us} | |||
Если ты, мой уважаемый друг еще не столкнулся с необходимостью перевода в шестнадцатеричную
систему и обратно, то рано или поздно, это произойдет. Я не хочу говорить о
том, что именно шестнадцатеричная система главная в программировании, это и
так ясно. С ней постоянно сталкивается даже обычный пользователь, например,
при определении RGB цвета во всех приличных программах. А уж человеку, поставившему
на свой компьютер Visual Basic и сам бог велел.
При описании флагов или объявлении констант мы постоянно пользуемся именно шестнадцатеричным
представлением числа, не говоря о том, что сканирование и поиск данных в двоичных
файлах вообще без этой системы в некоторых случаях невозможен. Поэтому я считаю
своим долгом очень кратко сказать следующее:
в шестнадцатеричной системе 16 цифр (это не открытие), последние шесть из которых
представляются латинскими буквами A, B, C, D, E и F. Представление чисел в шестнадцатиричной
форме (и на всякий случай в двоичной) показано в таблице:
Десятичная
|
Шестнадцатеричная
|
Двоичная
|
0
|
0
|
0000
|
1
|
1
|
0001
|
2
|
2
|
0010
|
3
|
3
|
0011
|
4
|
4
|
0100
|
5
|
5
|
0101
|
6
|
6
|
0110
|
7
|
7
|
0111
|
8
|
8
|
1000
|
9
|
9
|
1001
|
10
|
A
|
1010
|
11
|
B
|
1011
|
12
|
C
|
1100
|
13
|
D
|
1101
|
14
|
E
|
1110
|
15
|
F
|
1111
|
Чтобы явно задать число в шестнадцатеричном виде, надо перед числом поставить
символы &H. Например, оператор
b=&H15
присваивает переменной b значение 21 в десятичном представлении.
Для перевода в шестнадцатеричное представление в VB имеется функция Hex:
переменная= Hex (число)
где число - любое строковое или числовое выражение. Если число не целое,
то оно округляется до ближайшего целого,
Эта функция возвращает (обратите внимание) строковое шестнадцатеричное
представление числа до 8 знаков. Если число имеет недопустимое
значение (Null ), то функция возвращает пустое значение. Если число является
пустым значением (Empty), то функция возвращает ноль.
Ну тут и так все ясно и не для этого я пишу эту статейку. А пишу я ее вот для
чего.
Иногда возникает необходимость преобразовать шестнадцатеричное число в десятичное.
Для этого существует определенный алгоритм. Допустим нам надо преобразовать
число A20D14 в десятичное. Это можно сделать, используя формулу:
A20D14= (10*16^5)+(2*16^4)+(0*16^3)+(13*16^2)+(1*16^1)+(4*16^0)=10620180
Т. е. мы получаем сумму произведений из шестнадцатеричной цифры, представленой
в десятичном виде, умноженную на 16 (основание системы счисления) в степени
"позиция шестнадцатиричной цифры справа" минус 1. Этот алгоритм легко
реализовать программно. Удобнее это оформить функцией в стандартном модуле,
с тем, чтобы в проекте пользоваться ей так же как и функцией Hex. Содержимое
модуля может выглядеть приблизительно так:
Option
Explicit
'Объявим функцию, где в heximal мы будем передавать наше
шестнадцатеричное число
Function ConvertDec(heximal) As
Long
'объявим две переменные
'одну для шестнадцатеричной цифры числа
Dim Simvol As String
'вторую для соответствующей ему десятичной цифры
Dim DesChislo As Long
'а так же переменную для цикла
Dim x As Long
'обнулим
ConvertDec = 0
'переберем все цифры шестнадцатеричного числа
'и каждой поставим в соотвествие десятичную
For x = 1 To Len(heximal)
Simvol = Mid(heximal, x, 1)
If UCase(Simvol) = "A" Then
DesChislo = 10
ElseIf UCase(Simvol) = "B" Then
DesChislo = 11
ElseIf UCase(Simvol) = "C" Then
DesChislo = 12
ElseIf UCase(Simvol) = "D" Then
DesChislo = 13
ElseIf UCase(Simvol) = "E" Then
DesChislo = 14
ElseIf UCase(Simvol) = "F" Then
DesChislo = 15
Else
DesChislo = Val(Simvol)
End If
'накапливаем в нашей функции результат
ConvertDec = ConvertDec + DesChislo * 16 ^ (Len(heximal) - x)
Next x
'вот и все
End Function
Теперь мы можем на форме проекта разместить четыре TextBox'а и сделать в Text1 и Text2 перевод чисел в шестнадцатеричное представление и наоборот соответственно.
Private
Sub Text1_Change()
If Text1 <> "" Then Text3 = Hex(Text1)
Else Text3 = ""
End Sub
Private
Sub Text2_Change()
If Text2 <> "" Then Text4 = ConvertDec(Text2)
Else Text4 = ""
End Sub
Copyright
© 2005 4us
|