|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.12.2022, 16:06 | #1 |
Новичок
Джуниор
Регистрация: 18.12.2022
Сообщений: 2
|
Преобразование строки, состоящей из шестнадцатеричного числа
Код:
|
18.12.2022, 17:30 | #2 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
По приведённому алгоритму:
Шестнадцатеричное представление числа преобразуется в формат BCD. В этом формате цифры числа занимают 4-бита. Если символ из набора символов от '0' до '9', то результат умножается на 16. Умножение - это сдвиг влево. В данном случае - на 4-е бита. Из кода символа вычитается код символа '0'. Это соответствует двоичному представлению цифры. Полученное значение добавляется в результат. Иначе: результат так же сдвигается влево на 4-е бита, но из кода символа вычитается код символа 'A'. Это будет соответствует цифрам 0, 1, 2, 3, 4, 5 для символов 'A', 'B', 'C', 'D', 'E', 'F'. Добавляем 10-у и сохраняем в result. Пример: Код:
Как-то так, ...
|
18.12.2022, 17:37 | #3 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 736
|
Проход циклом по всем символам строки. Для одного символа: условие, если число от 0 до 9(включительно), то прибавляем его к результату предварительно сдвинув результат влево или умножить на 16(Base, база) -'0' - это преобразование из символа в число. Если число имеет букву(ветка else), то преобразуем ее в число.
|
18.12.2022, 17:45 | #4 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 736
|
|
18.12.2022, 17:45 | #5 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
А причем тут BCD. BCD это двоично десятичное кодирование, когда двоичное число в шестнадцатеричном представлении понимается как десятичное.
Тут просто перевод значений одного диапазона (ASCII кодов) в другой диапазон ([0 .. 15]). Т.к. в ASCII представлении между кодами 0,1,2,3,4,5,6,7,8,9 и A,B,C,D,E,F есть разрыв, то и обрабатываются они отдельно. Из-за этого и нужен if. Код:
Код:
Последний раз редактировалось macomics; 18.12.2022 в 18:17. |
19.12.2022, 11:04 | #6 | ||
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
По поводу BCD слегка махнул.
В том смысле, что исходно BCD -формат используется для кодирования десятичных цифр числа. В данном случае - это расширенная его форма, когда и шестнадцатеричная цифра числа упаковывается в BCD. Cuprum5 Цитата:
BCD - это формат для упаковки символьного представления чисел. При этом на цифру тратится один нибл (4-е бита), а в байте хранятся две цифры числа. macomics - Спасибо с схему. Самому было лень такое рисовать. Вместе с тем ваша схема скрывает тот факт, что символ занимает байт: '5' это 00110101, а не 0101. Вычитая символ нуля ('0' --> 00110000) или символ 'A' --> 01000001 из символа цифры, мы обнуляем старший нибл. Это позволяет выполнить следующие шаги: - сдвиг результата, полученного на предыдущем шаге влево на 4-е бита; - сложение (добавление 4-х битов в результат). Цитата:
Как-то так, ...
|
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Паскаль: является ли введенная с клавиатуры последовательность символов записью двоичного или шестнадцатеричного числа | Студент ММИ | Помощь студентам | 12 | 14.11.2014 14:22 |
Преобразование часов в числа, а так же преобразование время | PeMeHb | Microsoft Office Excel | 5 | 19.10.2014 17:04 |
Ввести строку, содержащую цифры. Определить является ли она записью шестнадцатеричного числа. | Roman1295 | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 24.12.2012 22:52 |
Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное число с фиксированной | manhant23 | C++ Builder | 1 | 27.01.2012 23:35 |
преобразование числа в hex | fize | Помощь студентам | 20 | 27.11.2009 19:45 |