Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование...

1.3K
10 декабря 2004 года
Pochemuchka
100 / / 16.12.2003
Как преоброзовать Десятичное число в восьмеричного и шестнадцатеричного и наоборот.

Naprimer u menya est

int x,y,z;

x=0xF;
y=To Dec (x) //Типо этого
301
11 декабря 2004 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by Pochemuchka
Как преоброзовать Десятичное число в восьмеричн[/code][COLOR=red]ое[/COLOR] и шестнадцатеричн[/code][COLOR=red]ое[/COLOR] и наоборот.

Naprimer u menya est

int x,y,z;

x=0xF;
y=To Dec (x) //Типо этого


Надеюсь, ты просто неправильно подобрал пример.=))
Если ты попробуешь згачение вывести x, то (о чудо!) оно будет выведен как 15 - десятичное число. форма 0x*** придумана ТОЛЬКО для удобства записи.

 
Код:
int a=1000;
char buf[128];
sprintf(buf,"%X",a);//Пишем в буфер (строку) число а в HEX формате.
sscanf(buf,"%X",&a);//Считываем из строки число в формате HEX.

Для OCT (8ричный формат) - вместо %X пиши %o. Вот.
1.3K
11 декабря 2004 года
Pochemuchka
100 / / 16.12.2003
Цитата:
Originally posted by lord Kelvin

Надеюсь, ты просто неправильно подобрал пример.=))
Если ты попробуешь згачение вывести x, то (о чудо!) оно будет выведен как 15 - десятичное число. форма 0x*** придумана ТОЛЬКО для удобства записи.
 
Код:
int a=1000;
char buf[128];
sprintf(buf,"%X",a);//Пишем в буфер (строку) число а в HEX формате.
sscanf(buf,"%X",&a);//Считываем из строки число в формате HEX.

Для OCT (8ричный формат) - вместо %X пиши %o. Вот.




A kak mojno delat'tak

Esli buf 16-niy to buf preobrazovat' v 10-ogo
Esli buf 8-niy to buf preobrazovat' v 10-ogo
Esli buf 10-niy to nichego ne delat'


Spasibo.

301
11 декабря 2004 года
lord Kelvin
897 / / 08.11.2004
 
Код:
int convert(char *str)
{
 int num;
 if(*str!='0')sscanf(str,"%d",&num);
 else if(str[1]!='x')sscanf(str+1,"%o",&num);
 else sscanf(str+2,"%x",&num);
 return num;
}

Эта функция не содержит в себе ни каких проверок. Сделаны такие допущения:
- Если число начинается на "0", то оно 8ричное.
- Если число начинается на "0x" - оно 16ричное.
- В любом другом случае оно десятичное.
- Строка заведомо верна.
Так что тебе еще придется дорабатывать эту функцию.
1.3K
11 декабря 2004 года
Pochemuchka
100 / / 16.12.2003
Spasibo,

U menya est vor takoy masiv
char mass[20];
char s[40];
i kakaya to stroka naprimer s="54+0x1F"
ya delal tak chto iz etoy stroki vse chto cifra i simvoli '.','x','X','A'-'F'
int i=0;
//Zdes' kod kotoriy dopuskaet vse perechislennie simvoli.
//
uje v masse zapisano int vot tak

mass[0]='5';
mass[1]='4';
mass[2]='\n';

int a;
a=atoi(mass);
Zdes peredayutsa k a tolko desatichni cifra a 16-ie i vosmerichnie net ...kak mne eto realizovat'???
368
11 декабря 2004 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by Pochemuchka
U menya est vor takoy masiv
char mass[20];
char s[40];
i kakaya to stroka naprimer s="54+0x1F"


Есть ф-ия strtol().

1.3K
12 декабря 2004 года
Pochemuchka
100 / / 16.12.2003
Цитата:
Originally posted by rostyslav

Есть ф-ия strtol().

No ono ne proborozaet hex v dec...kak eto delat'??

368
12 декабря 2004 года
rostyslav
629 / / 13.07.2004
Код:
char *ch=s;
char *chend=s+strlen(s);
int rdx;
for(;; )
{
  if(chend<=ch)break;
  if((ch[0]=='0')&&((ch[1]=='x')||(ch[1]=='X'))
    rdx=16;
  else
    rdx=10;
  int i = strtol(ch, &ch, rdx);
  ch++;
  //проверка
  char str[10];
  itoa(i, str, 10);
  AfxMessageBox(str);
}
1.3K
12 декабря 2004 года
Pochemuchka
100 / / 16.12.2003
Цитата:
Originally posted by rostyslav
Код:
char *ch=s;
char *chend=s+strlen(s);
int rdx;
for(;; )
{
  if(chend<=ch)break;
  if((ch[0]=='0')&&((ch[1]=='x')||(ch[1]=='X'))
    rdx=16;
  else
    rdx=10;
  int i = strtol(ch, &ch, rdx);
  ch++;
  //проверка
  char str[10];
  itoa(i, str, 10);
  AfxMessageBox(str);
}




Da spasibo
No ya uje delal eto samodel'no..eslo eto budet proveryat' specialist ocenit eto xoroshim sposobom ili ploxim, kak po vashemu

Код:
char st[40];
int g=0,og=0;
if (st!='0') {g=-1;og=-1;}
    if (st=='0'&&st[i+1]!='x')
    {
        g=-1;
           
        while (st&&(st!='+'&&st!='-'&&st!='*'&&st!='/'&&st!='('&&st!=')'&&st!='.'))
            {
       
            if (st=='0') og=og*8;
            if (st=='1') og=og*8+1;
            if (st=='2') og=og*8+2;
            if (st=='3') og=og*8+3;
            if (st=='4') og=og*8+4;
            if (st=='5') og=og*8+5;
            if (st=='6') og=og*8+6;
            if (st=='7') og=og*8+7;
           
                i=i++;
            }  


    }
    if (st=='0'&&st[i+1]=='x')
        {
        og=-1;
            while (st&&(st!='+'&&st!='-'&&st!='*'&&st!='/'&&st!='('&&st!=')'&&st!='.'))
            {
       
            if (st=='0') g=g*16;
            if (st=='1') g=g*16+1;
            if (st=='2') g=g*16+2;
            if (st=='3') g=g*16+3;
            if (st=='4') g=g*16+4;
            if (st=='5') g=g*16+5;
            if (st=='6') g=g*16+6;
            if (st=='7') g=g*16+7;
            if (st=='8') g=g*16+8;
            if (st=='9') g=g*16+9;
            if (st=='A'||st=='a') g=g*16+10;
            if (st=='B'||st=='b') g=g*16+11;
            if (st=='C'||st=='c') g=g*16+12;
            if (st=='D'||st=='d') g=g*16+13;
            if (st=='E'||st=='e') g=g*16+14;
            if (st=='F'||st=='f') g=g*16+15;
                i=i++;
            }
       

        }
368
12 декабря 2004 года
rostyslav
629 / / 13.07.2004
Нормально.

Пару микрозамечаний.

Если известно, что в строке пробела быть не может(судя по коду), то

while (st&&(st!='+'&&st!='-'&&st!='*'&&st!='/'&&st!='('&&st!=')'&&st!='.'))

можно заменить на while (st>='0')


Вместо
if (st=='0') og=og*8;
if (st=='1') og=og*8+1;
...
if (st=='7') og=og*8+7;

можно бы одного оператора
og = (og<<3) + st-48;

а для 16го случая

if (st<'A') g = (g<<4) + st-48;
else g = (g<<4) + st-55;
1.3K
12 декабря 2004 года
Pochemuchka
100 / / 16.12.2003
Цитата:


а для 16го случая

if (st<'A') g = (g<<4) + st-48;
else g = (g<<4) + st-55;



Ti zabil chto-to

i=i+2;
if (st<'A') g = (g<<4) + st-48;
else g = (g<<4) + st-55;

a to tam kod x-a 120
poluchaetsa
0xA=0+16*65+10=1050

368
12 декабря 2004 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by Pochemuchka


Ti zabil chto-to

i=i+2;
if (st<'A') g = (g<<4) + st-48;
else g = (g<<4) + st-55;

a to tam kod x-a 120
poluchaetsa
0xA=0+16*65+10=1050


это ты забыл. :) и в 8м тоже нужен бы i++. хоть там не баг, но лишняя операция. Макс. забыл обработку маленьких букв.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог