Теория
Для начала разоберёмся с шестнадцатеричной системой счисления. Ничего сложного в ней нет. Мы используем в жизни десятичную систему. Поэтому объяснения начну с аналогий:
В десятеричной системе мы используем десять цифр - от 0 до 9 => в шестнадцатеричной цифр должно быть 16. С первой десяткой вроде ясно (те же арабские цифры от 0..9), а как быть с остальными?? Этот вопрос решили просто - взяли первые шесь букв латинского алфавита. Таким образом получается такой набор цифр: 0 1 2 3 4 5 6 7 8 9 A B C D E F
В дальнейшем, для предотвращения путаницы шестнадцатеричные числа я буду писать, ставя на конце букву h или H (например 12A4Dh ) H - это сокращение от англ. hexadecimal (шестнадцатеричное). Для краткости его иногда называют просто Hex. Вообщем-то h пришло из языка Ассемблера.
Важно сразу же понять, что десятичные и шестнадцатеричные числа равны только в промежутке от 0..9, т.е. 10 = Аh, 11 = Bh .... 15 = Fh, а 11 не равно 11h.
Преобразование из шеснадцатеричной (HEX) в десятичную (DEC).
Для первода числа в Dec необходимо последовательно начиная с самой левой цифры умножать на 16 и складывать со следующей цифрой. Так как операции выполняются в 10-ом формате, то необходимо цифры A..F преобразовать в 11..15 :) Пример преобразования числа A7B8h:
Первая цифра А(10) Умножаем на 16
Прибавляем следующую цифру, 7
Умноить на 16
Прибавить следующую цифру, В(11)
Умножить на 16
Прибавить следующую цифру, 8 Десятичное значение | 10 x16 160 +7 167 x16 2672 +11 2683 x16 42928 +8 42936 |
Есть ещё один способ перевода из Hex в Dec:
A7B8h = 10 * 16 3 + 7 * 16 2 + 11 * 16 1 + 8 * 16 0 = 42936
Этот способ по-моему несколько проще: берём самую правую цифру и умножаем на 16 в 0 степени, сдвигаемся на одну цифру влево и умножаем на 16 в 1, ......... и т.д. пока не дойдём до конца. Вспомните из математики: любое число в 0 степени равно 1 (кроме 0 есстественно)! Вся сложность этого метода состоит в том, что нужно помнить много степеней 16, на первый взгляд это тяжело, но по-переводив пару сотен чисел :) степени запомнятся сами собой.
Теперь поговорим об обратном преобразовании из Hex в Dec.
Для преобразования необходимо сначала исходное число разделить на 16; число получившеесе в остатке является младшей шестнадатеричной цифрой. Затем уже частное поделить на 16 и полученый остаток даст следующую влево 16-ую цифру. Продолжая таким образом пока в частном не получится 0, из остатков получим все необходимые 16-ые цифры. Тут нужно незабывать делать обратные преобразования, т.е. 10 преобразовывать в А, 11 в B и т.д.
Пример переведём число 42936 в Hex:
|
Частное |
Остаток |
Шестнадцатиричное значение |
| 42936 / 16 |
2683 |
8 |
8 (младшая цифра) |
| 2683 / 16 |
167 |
11 |
B |
| 167 / 16 |
10 |
7 |
7 |
| 10 / 16 |
0 |
10 |
A (cтаршая цифра) |
Тем самым ответ: 42936 = A7B8h. Не забудьте, что результат пишется, как бы наоборот, т.е. первый остаток является последней цифрой искомого числа!
Дома не забудьте попрактиковаться - переводите числа на листочке из одной системы в другую, благо есть чем проверять!