Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужна помощь  (Прочитано 11122 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Студент
Гость
« : 28-11-2003 12:56 » 

Может кто знает, как перевести вводимые с клавиатуры числа в шестнадцатеричном формате в десятичный?
Записан
little
Помогающий

de
Offline Offline
Пол: Мужской

« Ответ #1 : 28-11-2003 13:32 » 

Ну как... Взять да пересчитать.
Младшую шеснадцатеричную цифру умножаем на 16^n, где n - номер шеснадцатеричной цифры в общем числе (младшая = 0)
Переходим к следующей цифре (n=1), результат складываем с предыдущим.
И так пока не преберем все цифры.

Если же теперь нужно вывести десятичный результат, то полученное значение надо будет разбивать по степеням десятки (10^n). В результате получим десятичные цифры.

Вполне возможно, что в 80x86 ассемблере есть команды двоично-десятичных преобразований, которые упростят работу.
Записан
Студент
Гость
« Ответ #2 : 29-11-2003 15:34 » 

Это понятно, но проблема в другом - то, что вводишь с клавиатуры  - ASCII символы. И с ними нельзя работать как с 16х числом - это просто набор знаков
Записан
Vorlon
Гость
« Ответ #3 : 29-11-2003 16:09 » 

В ASCII коде цифрам соответствуют такие значения:

0x30 - '0'
...
0x39 - '9'

От ASCII кода отнимаешь 0x30 и получаешь цифру.

А что до названия темы, рекомендую посмотреть сюда https://forum.shelek.ru/index.php/topic,1400.0.html
Записан
Sashok
Молодой специалист

us
Offline Offline
Пол: Мужской

« Ответ #4 : 29-11-2003 16:23 » 

Для ASCII все очень просто:

if(цифра >= 0x30 && цифра < 0х3а)
   вычесть 0х30 из кода цифры;
else
   if( цифра >= 'A' && цифра <= 'F' )
      вычесть 'A' из кода цифры;
   else
      if( цифра >= 'a' && цифра <= 'f' )
         вычесть 'a' из кода цифры;
      else
         ошибка!

Так переводится одна цифра. А дальше, как обычно,
while(есть еще цифры)
{
  умножить результат на 16;
  добавить очередную переведенную цифру;
}
Записан

Если бы окружающие нас объекты содержали столько же ошибок, сколько программы, цивилизация обрушилась бы от первого порыва ветра...
Студент
Гость
« Ответ #5 : 29-11-2003 18:59 » 

Sashok, спасибо!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 29-11-2003 22:10 » 

Ошибочка у тебя в коде, Sashok: "вычесть А" - этого мало, надо еще 10 добавить. То же и для "а".
Накидал немного:
Код:

; 16bit
; IN{ SI=ASCIIZ
; OUT{ AX
hex2int{
    push bx
    push si
    xor bx,bx
hex2int_1{
    lodsb
    test al,al
    jz hex2int_exit
    cmp al,30h
    jc hex2int_exit
    cmp al,3ah
    jc hex2int_2
    and al,0dfh ; reset bit 5 )small2BIG:
    cmp al,41h
    jc hex2int_exit
    cmp al,47h
    jnc hex2int_exit
    sub al,7
hex2int_2{
    sub al,30h
    shl bx,4
    or bl,al
    jmp hex2int_1
hex2int_exit{
    mov ax,bx
    pop si
    pop bx
    ret
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Студент
Гость
« Ответ #7 : 30-11-2003 10:33 » 

Удивляюсь доброжелательности людей на этом форуме!
Такое сознательное отношение к чужим проблемам! :!:  :!:  :!:
Записан
Sashok
Молодой специалист

us
Offline Offline
Пол: Мужской

« Ответ #8 : 30-11-2003 17:43 » new

Цитата: RXL
Ошибочка у тебя в коде, Sashok: "вычесть А" - этого мало, надо еще 10 добавить. То же и для "а".
:oops:  :oops:  :oops:
"И на старуху бывает проруха..."
Записан

Если бы окружающие нас объекты содержали столько же ошибок, сколько программы, цивилизация обрушилась бы от первого порыва ветра...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines