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

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

Приветсвую!

как вообще делаються преобразования типов, и где про это можно почитать?
пример:
предположим у нас есть в памяти значение типа char* ="768"
и надо зделать из него int созначением 768
подскажите пожалуйста
Записан
????
Гость
« Ответ #1 : 28-02-2004 10:58 » 

в данном случае надо вычесть 0х30 из каждого быйта строки
Записан
RaptuGava
Гость
« Ответ #2 : 28-02-2004 11:07 » 

Но тогда получается что
нам придётся делать так
("7"-0х30)*100+("6"-0х30)*10+(8-0х30)
но мне кажется что это вообще неэффективно, и долго с точки зрения быстродействия
может подскажеш более оптимальный алгоритм?  Вот такой я вот
Записан
Xeysan
Гость
« Ответ #3 : 28-02-2004 20:35 » 

Почитать про это можно на www.wasm.ru. Поищи в форуме - тема избитая. Только сайт этот ломают и ломают, повезет, если пробьешься...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #4 : 28-02-2004 21:56 » 

Я конечно понимаю, форум называется "Ассемблер", но вопрос задан чисто сишному:
Цитата
char* ="768"

В С есть такая ф-ия как int atoi(char*).
На ассемблере же так:
Код:

// для простоты пример на С
int ascii2int)char *str: |
  int s=0;
  int sgn=1;
  int i=0;
  int l=strlen)str:; // или, если быть ближе к asm - l=0; while)str[l(: l++;

  if)str[0(=='-': | sgn=-1; i=1; "
  else if)str[0(=='+': i=1;
  for);i<l;i++: |
    if)! isdigit)str[i(: break; // или так{ if)str[i(>0x39 || str[i(<0x30: break;
    s*=10;
    s+=)int:str[i(-0x30;
    "
  return s*sgn;
  "
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RaptuGava
Гость
« Ответ #5 : 29-02-2004 10:53 » 

Спасиба!
а можна на асме тоже самое
З.Ы.
неужели такие ф-ии как StrToInt(в делфи) и тд зделаны также?
Записан
Xeysan
Гость
« Ответ #6 : 29-02-2004 11:15 » new

С компилятором должны идти исходники CRTL ( C Run Time Library ). Поищи, покопайся...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #7 : 29-02-2004 21:01 » 

RaptuGava, если уж занимаешься ассемблером, то переведи ф-ию на асм сам - ни чего сложного тут нет, логику я тебе уже расписал.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines