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

Обложка к статье "Перевод из шестнадцатеричной системы в восьмеричную в Python"

В мире программирования и информационных технологий важное место занимают системы счисления. Они являются основой для представления и обработки данных в компьютерных системах.

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

В этой статье мы подробно рассмотрим, как можно перевести число из шестнадцатеричной системы счисления в восьмеричную с использованием языка программирования Python. Мы обсудим несколько методов: перевод через двоичную систему, перевод через десятичную систему и использование встроенных функций Python.

Цель статьи — предоставить читателям полное руководство по переводу чисел между шестнадцатеричной и восьмеричной системами счисления, дополненное примерами кода и практическими рекомендациями.

Содержание
  1. Основные понятия
  2. Алгоритм перевода из шестнадцатеричной в восьмеричную через двоичную систему
  3. Таблица соответствия шестнадцатеричных цифр к двоичным числам
  4. Таблица соответствия трёхбитовых чисел к восьмеричным цифрам
  5. Разбор примера
  6. Алгоритм перевода из шестнадцатеричной в восьмеричную через десятичную систему
  7. Шаг 1: Преобразование из шестнадцатеричной в десятичную
  8. Шаг 2: Преобразование из десятичной в восьмеричную
  9. Использование встроенных функций Python для перевода шестнадцатеричного числа в восьмеричное
  10. Шаг 1: Преобразование в десятичное число
  11. Шаг 2: Преобразование в восьмеричное число
  12. Пример полной программы
  13. Преобразования числа из шестнадцатеричной системы счисления в восьмеричную через двоичную систему в Python
  14. Преобразования из шестнадцатеричной в восьмеричную через десятичную систему в Python

Основные понятия

Чтобы понять процесс перевода чисел из шестнадцатеричной системы счисления в восьмеричную, для начала ознакомимся с несколькими ключевыми понятиями.

Система счисления — это согласованный набор символов и правил, используемых для представления чисел. В информатике и программировании чаще всего используются следующие системы счисления:

  • Двоичная (бинарная): Использует два символа, 0 и 1, и является основой для представления данных в компьютерах.
  • Восьмеричная: Состоит из восьми символов, от 0 до 7, и была популярна в ранних днях компьютерной эры для краткости представления бинарных данных.
  • Десятичная: Наиболее знакомая система, использующая десять символов, от 0 до 9. Это стандартная система счисления для представления чисел в повседневной жизни.
  • Шестнадцатеричная: Использует шестнадцать символов, включая 0-9 и буквы от A до F, и широко применяется в программировании для удобства представления бинарных данных.

Алгоритм перевода из шестнадцатеричной в восьмеричную через двоичную систему

Преобразование шестнадцатеричного числа в восьмеричное через двоичную систему счисления состоит из двух шагов:

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

Для начала приведём таблицы соответствия, которые помогут нам в реализации алгоритма.

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

Шестнадцатеричное Двоичное
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Таблица соответствия трёхбитовых чисел к восьмеричным цифрам

Трёхбитовое число Восьмеричная цифра
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Разбор примера

Переведем шестнадцатеричное число 1A3 в восьмеричное путем промежуточного преобразования в двоичную систему.

  1. Перевод в двоичное число:
    • 1 в шестнадцатеричной системе будет 0001 в двоичной.
    • A в шестнадцатеричной системе будет 1010 в двоичной.
    • 3 в шестнадцатеричной системе будет 0011 в двоичной.

    Таким образом, двоичное представление 1A3 будет 000110100011.

  2. Группировка по три бита и перевод в восьмеричное число:
    • Двоичное число 000110100011 группируем по три бита справа налево: 000 110 100 011.
    • Преобразуем каждую группу в восьмеричную систему:
      • 000 -> 0
      • 110 -> 6
      • 100 -> 4
      • 011 -> 3

    Итак, 000110100011 в двоичной системе соответствует 643 в восьмеричной системе.

Алгоритм перевода из шестнадцатеричной в восьмеричную через десятичную систему

Преобразование числа из шестнадцатеричной системы счисления в восьмеричную через десятичную систему — это двухэтапный процесс, включающий последовательное преобразование шестнадцатеричного числа сначала в десятичное, а затем из десятичного в восьмеричное. Этот метод основывается на математическом принципе получения остатков от деления. Ниже описаны шаги, необходимые для выполнения такого преобразования.

Шаг 1: Преобразование из шестнадцатеричной в десятичную

  1. Разложение шестнадцатеричного числа: Каждая цифра шестнадцатеричного числа умножается на степень основания 16, соответствующую её позиции (начиная справа и считая от 0).
  2. Сложение результатов: Сумма полученных произведений дает эквивалентное десятичное число.

Для шестнадцатеричного числа 1A3:

  • Разложим его на десятичные эквиваленты: 1*162 + 10*161 + 3*160.
  • Вычисляем: 1*256 + 10*16 + 3*1 = 256 + 160 + 3 = 419.

Таким образом, 1A3 в шестнадцатеричной системе равно 419 в десятичной системе.

Шаг 2: Преобразование из десятичной в восьмеричную

  1. Получение остатков от деления на 8: Десятичное число делится на 8, и остаток записывается. Процесс повторяется для частного от деления, пока частное не станет равным 0.
  2. Формирование восьмеричного числа: Остатки, полученные на каждом шаге, читаются в обратном порядке, формируя итоговое восьмеричное число.

Для десятичного числа 419:

  • Делим 419 на 8: частное 52, остаток 3.
  • Делим 52 на 8: частное 6, остаток 4.
  • Делим 6 на 8: частное 0, остаток 6.

Читая остатки в обратном порядке, получаем восьмеричное число 643.

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

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

Основная идея заключается в двух шагах: сначала преобразовать шестнадцатеричное число в десятичное, используя функцию int(), а затем преобразовать полученное десятичное число в восьмеричное, используя функцию oct().

Шаг 1: Преобразование в десятичное число

Функция int() может принимать два аргумента: строку, представляющую число, и основание системы счисления этого числа. Для преобразования шестнадцатеричного числа в десятичное, передаем шестнадцатеричное число как строку и 16 как основание системы счисления.

hex_number = "1A3"
decimal_number = int(hex_number, 16)

Шаг 2: Преобразование в восьмеричное число

После получения десятичного числа, функция oct() используется для преобразования этого числа в строку, представляющую его восьмеричное значение. Функция oct() возвращает строку, начинающуюся с префикса 0o, который указывает на восьмеричное число.

octal_number = oct(decimal_number)

Для удаления префикса и получения чистого восьмеричного числа можно использовать срез строки:

octal_number = oct(decimal_number)[2:]

Пример полной программы

# Запрос шестнадцатеричного числа у пользователя
hex_number = input("Введите шестнадцатеричное число: ")

# Преобразование в десятичное число
decimal_number = int(hex_number, 16)

# Преобразование в восьмеричное число
octal_number = oct(decimal_number)[2:]

# Вывод результата
print(f"Восьмеричное представление числа {hex_number}: {octal_number}")

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

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

Сначала посмотрим на код программы, а после разберём его подробно.

def hex_to_oct_via_bin(hex_str):
    # Определение словарей внутри функции
    hex_to_bin_dict = {
        '0': '0000', '1': '0001', '2': '0010', '3': '0011',
        '4': '0100', '5': '0101', '6': '0110', '7': '0111',
        '8': '1000', '9': '1001', 'A': '1010', 'B': '1011',
        'C': '1100', 'D': '1101', 'E': '1110', 'F': '1111'
    }

    bin_to_oct_dict = {
        '000': '0', '001': '1', '010': '2', '011': '3',
        '100': '4', '101': '5', '110': '6', '111': '7'
    }

    # Преобразование шестнадцатеричного числа в двоичное
    binary_str = ''.join(hex_to_bin_dict[digit.upper()] for digit in hex_str)

    # Дополнение двоичного числа нулями до полных троек битов, если необходимо
    if len(binary_str) % 3:
        binary_str = '0' * (3 - len(binary_str) % 3) + binary_str

    # Преобразование двоичного числа в восьмеричное
    octal_str_parts = [bin_to_oct_dict[binary_str[i:i+3]] for i in range(0, len(binary_str), 3)]
    # Удаление ведущих нулей из результата, кроме случая, когда число равно 0
    octal_str = ''.join(octal_str_parts).lstrip('0') or '0'

    return octal_str

# Запрос ввода шестнадцатеричного числа у пользователя и вывод результата
hex_number = input("Введите шестнадцатеричное число: ")
octal_number = hex_to_oct_via_bin(hex_number)
print(f"Восьмеричное представление числа {hex_number}: {octal_number}")

Теперь разберём код построчно:

def hex_to_oct_via_bin(hex_str):

Определяем функцию hex_to_oct_via_bin, которая принимает строку hex_str, представляющую шестнадцатеричное число.

hex_to_bin_dict = {
        ...
    }

Внутри функции объявляем словарь hex_to_bin_dict, который содержит соответствие между шестнадцатеричными цифрами и их двоичным представлением.

bin_to_oct_dict = {
        ...
    }

Объявляем второй словарь bin_to_oct_dict для преобразования трехбитовых двоичных чисел в восьмеричные цифры.

binary_str = ''.join(hex_to_bin_dict[digit.upper()] for digit in hex_str)

Преобразуем входное шестнадцатеричное число в двоичную строку, перебирая каждую цифру, приводя её к верхнему регистру (чтобы учесть буквы A-F в любом регистре) и заменяя на соответствующие двоичные значения с помощью словаря hex_to_bin_dict.

if len(binary_str) % 3:
        binary_str = '0' * (3 - len(binary_str) % 3) + binary_str

Если длина числа не делится на 3 без остатка, добавляем нули впереди числа, чтобы обеспечить полные тройки битов для последующего преобразования в восьмеричную систему.

octal_str_parts = [bin_to_oct_dict[binary_str[i:i+3]] for i in range(0, len(binary_str), 3)]

Разбиваем двоичную строку на трехбитовые сегменты и преобразуем каждый сегмент в восьмеричную цифру, используя словарь bin_to_oct_dict. Результат сохраняем в списке octal_str_parts.

octal_str = ''.join(octal_str_parts).lstrip('0') or '0'

Объединяем восьмеричные цифры в одну строку и удаляем все нули впереди числа для получения конечного восьмеричного представления. Если результат оказывается пустой строкой (то есть, исходное число было 0), возвращаем '0'.

hex_number = input("Введите шестнадцатеричное число: ")

Запрашиваем у пользователя ввод шестнадцатеричного числа.

print(f"Восьмеричное представление числа {hex_number}: {octal_number}")

Выводим восьмеричное представление исходного шестнадцатеричного числа на экран.

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

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

Шаги реализации:

  1. Преобразование из шестнадцатеричной в десятичную систему:

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

  2. Преобразование из десятичной в восьмеричную систему:

    Полученное десятичное число затем преобразуется в восьмеричное путём деления на 8 и сбора остатков от деления в обратном порядке.

Сначала посмотрим на код программы:

def hex_to_decimal(hex_str):
    decimal = 0
    for digit in hex_str.upper():
        if '0' <= digit <= '9':
            value = int(digit)
        else:
            value = ord(digit) - ord('A') + 10
        decimal = decimal * 16 + value
    return decimal

def decimal_to_octal(decimal):
    octal = ''
    while decimal > 0:
        octal = str(decimal % 8) + octal
        decimal = decimal // 8
    return octal if octal else '0'

def hex_to_octal_via_decimal(hex_str):
    decimal = hex_to_decimal(hex_str)
    octal = decimal_to_octal(decimal)
    return octal

# Пример использования
hex_number = input("Введите шестнадцатеричное число: ")
octal_number = hex_to_octal_via_decimal(hex_number)
print(f"Восьмеричное представление числа {hex_number}: {octal_number}")

Давайте разберем данный код подробнее.

def hex_to_decimal(hex_str):

Определяем функцию hex_to_decimal, принимающую строку hex_str, представляющую шестнадцатеричное число.

decimal = 0

Инициализируем переменную decimal для хранения результата преобразования в десятичное число.

for digit in hex_str.upper():

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

if '0' <= digit <= '9':
            value = int(digit)

Если число от 0 до 9 включительно, то просто преобразуем его в числовой формат.

else:
      value = ord(digit) - ord('A') + 10

Если цифра — буква (от A до F), вычисляем её числовое значение, используя разницу кодов символов в юникоде, с корректировкой на 10, чтобы получить значения от 10 до 15. Например, юникод символа A — 65, юникод символа B — 66. 66 — 65 + 10 = 11 (что соответствует B в шестнадцатеричной системе).

decimal = decimal * 16 + value

Умножаем текущее десятичное значение на 16 (сдвигаем его на один разряд в шестнадцатеричной системе) и добавляем числовое значение текущей цифры.

return decimal

Возвращаем полученное десятичное число.

def decimal_to_octal(decimal):

Определяем функцию decimal_to_octal, преобразующую десятичное число в восьмеричное.

octal = ''

Инициализируем пустую строку octal для хранения результата преобразования.

while decimal > 0:

Повторяем, пока десятичное число больше нуля.

octal = str(decimal % 8) + octal

Получаем остаток от деления на 8 (восьмеричная цифра), преобразуем его в строку и добавляем к началу строки octal.

decimal = decimal // 8

Обновляем decimal, выполняя целочисленное деление на 8.

return octal if octal else '0'

Возвращаем полученное восьмеричное число, или '0', если исходное число было нулём.

hex_number = input("Введите шестнадцатеричное число: ")
octal_number = hex_to_octal_via_decimal(hex_number)
print(f"Восьмеричное представление числа {hex_number}: {octal_number}")

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

Оцените статью
( Пока оценок нет )
Обучение Python
Добавить комментарий