Visual Basic с нуля. Перевод из шестнадцатеричной системы счисления в десятичную. Как перевести с шестнадцатиричной в десятичную


Visual Basic с нуля. Перевод из шестнадцатеричной системы счисления в десятичную.

Если ты, мой уважаемый друг еще не столкнулся с необходимостью перевода в шестнадцатеричную систему и обратно, то рано или поздно, это произойдет. Я не хочу говорить о том, что именно шестнадцатеричная система является в программировании главной, это и так ясно. С ней постоянно сталкивается даже обычный пользователь, например, при определении 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=&h25 присваивает переменной 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 = 10ElseIf UCase(Simvol) = "B" Then DesChislo = 11ElseIf UCase(Simvol) = "C" Then DesChislo = 12ElseIf UCase(Simvol) = "D" Then DesChislo = 13ElseIf UCase(Simvol) = "E" Then DesChislo = 14ElseIf UCase(Simvol) = "F" Then DesChislo = 15Else 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

vbzero.narod.ru

Перевод из шестнадцатеричной в двоичную систему счисления на Си

char* fromHEXtoBIN(long a, char *bin)

{

    long tmp = a;

    int N;

    if (a == 0)

        N = 1;

    else

    {

        N = 0;

        while (tmp != 0)

        {

            N++;

            tmp = tmp / 16;

        }

    }

    bin = (char*)malloc((4 * N + 1)*sizeof(char));

    for (int i = N - 1; i >= 0; i--)

    {

        switch (a % 16)

        {

            case 0:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '0';

                break;

            }

            case 1:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '1';

                break;

            }

            case 2:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '0';

                break;

            }

            case 3:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '1';

                break;

            }

            case 4:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '0';

                break;

            }

            case 5:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '1';

                break;

            }

            case 6:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '0';

                break;

            }

            case 7:

            {

                bin[4 * i] = '0';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '1';

                break;

            }

            case 8:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '0';

                break;

            }

            case 9:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '1';

                break;

            }

            case 10:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '0';

                break;

            }

            case 11:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '0';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '1';

                break;

            }

            case 12:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '0';

                break;

            }

            case 13:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '0';

                bin[4 * i + 3] = '1';

                break;

            }

            case 14:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '0';

                break;

            }

            case 15:

            {

                bin[4 * i] = '1';

                bin[4 * i + 1] = '1';

                bin[4 * i + 2] = '1';

                bin[4 * i + 3] = '1';

                break;

            }

        }

        a = a / 16;

    }

    bin[4 * N] = '\0';

    return bin;

}

vscode.ru

Перевод чисел из шестнадцатеричной системы в десятичную

После изучения предыдущего раздела переформулировать алгоритм перевода чисел из шестнадцатеричной в десятичную систему счисления не составляет никакого труда. Помнить следует лишь о том, что для шестнадцатеричной системы счисления основанием является число 16, и правило перевода в данном случае может быть сформулировано в следующем виде:

Для перевода шестнадцатеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания шестнадцатеричной системы счисления на соответствующие цифры в разрядах шестнадцатеричного числа.

Например, требуется перевести шестнадцатеричное число F45ED23C в десятичное. В этом числе 8 цифр и 8 разрядов (помним, что разряды считаются, начиная с нулевого, которому соответствует младший бит). В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:

F45ED23C16 = (15·167)+(4·166)+(5·165)+(14·164)+(13·163)+(2·162)+(3·161)+(12·160) = = 409985490810

Для вычислений "вручную" и решения примеров и контрольных заданий вам могут пригодиться таблицы степеней оснований изучаемых систем счисления (2, 8, 10, 16), приведенные в Приложении.

Перевод чисел из десятичной системы в двоичную

Для перевода чисел из десятичной системы счисления в двоичную используют так называемый "алгоритм замещения", состоящий из следующей последовательности действий:

  1. Делим десятичное число Ана2. ЧастноеQзапоминаем для следующего шага, а остатокaзаписываем какмладшийбит двоичного числа.

  2. Если частное qне равно0, принимаем его за новое делимое и повторяем процедуру, описанную в шаге 1. Каждый новый остаток (0или1) записывается в разряды двоичного числа в направлении отмладшегобита кстаршему.

  3. Алгоритм продолжается до тех пор, пока в результате выполнения шагов 1 и 2 не получится частное Q=0и остатокa=1.

Например, требуется перевести десятичное число 247 в двоичное. В соответствии с приведенным алгоритмом получим:

24710 : 2 = 12310

24710-24610=1, остаток1записываем вМБдвоичного числа.

12310 : 2 = 6110

12310-12210=1, остаток1записываем в следующий послеМБразряд двоичного числа.

6110 : 2 = 3010

6110-6010=1, остаток1записываем в старший разряд двоичного числа.

3010 : 2 = 1510

3010-3010=0, остаток0записываем в старший разряд двоичного числа.

1510 : 2 = 710

1510-1410=1, остаток1записываем в старший разряд двоичного числа.

710 : 2 = 310

710-610=1, остаток1записываем в старший разряд двоичного числа.

310 : 2 = 110

310-210=1, остаток1записываем в старший разряд двоичного числа.

110 : 2 = 010, остаток1записываем в старший разряд двоичного числа.

Таким образом, искомое двоичное число равно 111101112.

Перевод чисел из десятичной системы в восьмеричную

Для перевода чисел из десятичной системы счисления в восьмеричную используют тот же "алгоритм замещения", что и при переводе из десятичной системы счисления в двоичную, только в качестве делителя используют 8, основание восьмеричной системы счисления:

  1. Делим десятичное число Ана8. ЧастноеQзапоминаем для следующего шага, а остатокaзаписываем какмладшийбит восьмеричного числа.

  2. Если частное qне равно0, принимаем его за новое делимое и повторяем процедуру, описанную в шаге 1. Каждый новый остаток записывается в разряды восьмеричного числа в направлении отмладшегобита кстаршему.

  3. Алгоритм продолжается до тех пор, пока в результате выполнения шагов 1 и 2 не получится частное Q=0и остатокaменьше8.

Например, требуется перевести десятичное число 3336 в восьмеричное. В соответствии с приведенным алгоритмом получим:

333610 : 8 = 41710

333610-333610=0, остаток0записываем вМБвосьмеричного числа.

41710 : 8 = 5210

41710-41610=1, остаток1записываем в следующий послеМБразряд восьмеричного числа.

5210 : 8 = 610

5210-4810=4, остаток4записываем в старший разряд восьмеричного числа.

610 : 8 = 010, остаток0, записываем6в самый старший разряд восьмеричного числа.

Таким образом, искомое восьмеричное число равно 64108.

studfiles.net

Шестнадцатеричные цифры, преобразование шестнадцатеричного числа в десятичное

Умение преобразовывать шестнадцатеричные числа может быть полезно не только программистам, но и дизайнерам, ведь триада RRGGBB есть не что иное, как «машинные» компоненты для красного, зелёного и синего соответственно — от 0 до 255 каждое. Конечно, графические редакторы содержат палитры со встроенными преобразователями, а стандартный калькулятор операционной системы умеет справляться с этой задачей, но порой гораздо удобнее самому «накинуть +14» к требуемой компоненте, а не запускать сторонние программы.

Прежде, чем я покажу, как (легко) можно переводить числа из шестнадцатеричной системы и более привычную для нас, необходимы дополнительные мероприятия. Все мы в школе учили таблицу умножения, и можем убедиться, что данный навык остался (хотя некоторые им в повседневной жизни не пользуются). Теперь же потребуется немного углубить знания, выучив её вплоть до 16 × 16.

И последнее: я убеждён, что рядовому пользователю эти навыки не понадобятся с вероятностью 99.…%. В общем, вы предупреждены .

Таблица умножение от 11 до 16

11 11 × 2 = 2211 × 3 = 3311 × 4 = 4411 × 5 = 5511 × 6 = 6611 × 7 = 7711 × 8 = 8811 × 9 = 9911 × 10 = 11011 × 11 = 12111 × 12 = 13211 × 13 = 14311 × 14 = 15411 × 15 = 16511 × 16 = 176 12 12 × 2 = 2412 × 3 = 3612 × 4 = 4812 × 5 = 6012 × 6 = 7212 × 7 = 8412 × 8 = 9612 × 9 = 10812 × 10 = 12012 × 11 = 13212 × 12 = 14412 × 13 = 15612 × 14 = 16812 × 15 = 18012 × 16 = 192 13 13 × 2 = 2613 × 3 = 3913 × 4 = 5213 × 5 = 6513 × 6 = 7813 × 7 = 9113 × 8 = 10413 × 9 = 11713 × 10 = 13013 × 11 = 14313 × 12 = 15613 × 13 = 16913 × 14 = 18213 × 15 = 19513 × 16 = 208
14 14 × 2 = 2814 × 3 = 4214 × 4 = 5614 × 5 = 7014 × 6 = 8414 × 7 = 9814 × 8 = 11214 × 9 = 12614 × 10 = 14014 × 11 = 15414 × 12 = 16814 × 13 = 18214 × 14 = 19614 × 15 = 21014 × 16 = 224 15 15 × 2 = 3015 × 3 = 4515 × 4 = 6015 × 5 = 7515 × 6 = 9015 × 7 = 10515 × 8 = 12015 × 9 = 13515 × 10 = 15015 × 11 = 16515 × 12 = 18015 × 13 = 19515 × 14 = 21015 × 15 = 22515 × 16 = 240 16 16 × 2 = 3216 × 3 = 4816 × 4 = 6416 × 5 = 8016 × 6 = 9616 × 7 = 11216 × 8 = 12816 × 9 = 14416 × 10 = 16016 × 11 = 17616 × 12 = 19216 × 13 = 20816 × 14 = 22416 × 15 = 24016 × 16 = 256

Следующим шагом необходимо соотнести десятичные числа от 10 до 15 с шестнадцатеричными цифрами от A до F.

Таблица соответствия шестнадцатеричных цифр

HEX (шестнадцатеричная) DEC (десятичная)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
A 10
B 11
C 12
D 13
E 14
F 15

А теперь вспомним поразрядное умножение из предыдущей статьи, для цифры 7. Здесь будет лишь поправка на другую систему счисления (не на 10, как там, а на 16).

Обычно в компьютерной литературе, для однозначного указания основания системы счисления, применяется следующая нотация:— шестнадцатеричное число — 0x100 (256 в десятичной, признак — 0x в начале)— десятичное число — 100 (наша, человеческая, система счисления)— восьмеричное число — 0100 (64 в десятичной, признак — ведущий ноль)— двоичное число — 0b100 (4 в десятичной, признак — 0b в начале)

Преобразование шестнадцатеричного числа в десятичное

Для начала, небольшой рисунок:

Для преобразования требуется каждую цифру числа умножить на «разряд», в котором оно находится. Из курса начальной школы мы помним, что позиции, занимаемые в числовой строке, называются (справа налево) единицы, десятки, сотни и т. д. Здесь почти то же самое, но с поправкой на систему счисления. Каждый следующий разряд — это +1 степень текущей системы счисления. Любое число в степени ноль — это ноль, в степени 1 — самом число, в степени 2 (квадрат) — число, умноженное само на себя и т. д.

Для наглядности привожу пример. Допустим, возьмём шестнадцатеричное число 0x1F8. Нам требуется перевести его в десятичную систему, поэтому запишем (0x — это признак основания!):

1F816 = 116 × 162 + F16 × 161 + 816 × 160 = 1 × 256 + 15 × 16 + 8 × 1 = 256 + 240 + 8 = 504

Обе таблички нам пригодились: благодаря второй мы переводим числа из шестнадцатеричной системы в десятичную, благодаря первой — легко перемножаем «больше» числа.

Небольшое отступление

А знаете ли вы, что у нас сейчас могла бы использоваться двенадцатеричная система счисления, используемая ещё шумерцами? По одной и версий, этому способствовало количество фаланг пальцев руки. Взгляните на рисунок:

Скорее всего, вам сложно это представить. Но, взглянув на это под другим углом, можем убедиться, что выбор был бы очень хорош, ведь 12 делится без остатка на 2, 3, 4, 6 (в то время, как 10 можно разделить лишь на 2 и 5). Естественно, умножения и деления на степень числа 12 были так же просты, как сейчас аналогичные операции для степени числа 10.

Выучив эти таблицы, любой человек легко сможет переводить компьютерные байты в привычные числа. При желании, как следует потренировавшись и «расширив объём» краткосрочной памяти, станут доступны и более сложные варианты. Но, как уже говорилось чуть ранее, манипуляции с байтами мало кому нужны, не говоря о чём-то большем.

Автор публикации

1 891

не в сети 1 час

x64 (aka andi)

Комментарии: 2750Публикации: 384Регистрация: 02-04-2009 Загрузка...

a-panov.ru

Шестнадцатеричная система счисления

Шестнадцатеричная система счисления (шестнадцатеричные числа) — позиционная система счисления по основанию 16. Обычно в качестве шестнадцатеричных цифр используются десятичные цифры от 0 до 9 и латинские буквы от A до F для обозначения цифр от 10 до 15.

Применение

Широко используется в низкоуровневом программировании и вообще в компьютерной документации, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему.

Способы записи

В математике

В математике систему счисления принято писать в подстрочном знаке. Например, десятичное число 1443 можно записать как 144310 или как 5A316.

В языках программирования

В разных языках программирования для записи шестнадцатеричных чисел используют различный синтаксис:

  • В Ада и VHDL такие числа указывают так: "16#5A3#".
  • В Си и языках схожего синтаксиса, например, в Java, используют префикс "0x". Например, "0x5A3".
  • В некоторых ассемблерах используют букву "h", которую ставят после числа. Например, "5A3h". При этом, если число начинается не с десятичной цифры, впереди ставится "0" (ноль): "0FFh" (25510)
  • Другие ассемблеры (AT&T, Motorola), а также Паскаль и некоторые версии Бэйсика используют префикс "$". Например, "$5A3".
  • Другие версии Бэйсика используют для указания шестнадцатеричных цифр сочетание "&h". Например, "&h5A3".

Перевод чисел из одной системы счисления в другую

Перевод чисел из шестнадцатеричной системы в десятичную

Для перевода шестнадцатеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания шестнадцатеричной системы счисления на соответствующие цифры в разрядах шестнадцатеричного числа.

Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:

5A316=5·162+10·161+3·160=5·256+10·16+3·1=1280+160+3=144310

Перевод чисел из двоичной системы в шестнадцатеричную

Для перевода многозначного двоичного числа в шестнадцатеричную систему нужно разбить его на тетрады справа налево и заменить каждую тетраду соответствующей шестнадцатеричной цифрой.

Например:

101101000112=0101 1010 0011=5A316

Таблица перевода чисел

Десятичное

Шестнадцатеричное

Двоичное

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

См. также Таблица порядков двоичных, шестнадцатеричных и десятичных чисел

См. также

mediaknowledge.ru