Часть 3. Реализация некоторых задач..
На главную самоучителя
03.06.2005
Системы счисления.
Шестнадцатеричное представление числа. Перевод числа
из шестнадцатеричной системы счисления в десятичную.
Скачать исходник примера "Hex"

Если ты, мой уважаемый друг еще не столкнулся с необходимостью перевода в шестнадцатеричную систему и обратно, то рано или поздно, это произойдет. Я не хочу говорить о том, что именно шестнадцатеричная система является в программировании главной, это и так ясно. С ней постоянно сталкивается даже обычный пользователь, например, при определении 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

Сайт создан в системе uCoz