Часть
3. Реализация некоторых задач..
|
||||||
03.06.2005 | ||||||
Системы
счисления.
|
||||||
Шестнадцатеричное
представление числа. Перевод числа
из шестнадцатеричной системы счисления в десятичную. |
||||||
Десятичная
|
Шестнадцатеричная
|
Двоичная
|
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
|