Преобразование...
Naprimer u menya est
int x,y,z;
x=0xF;
y=To Dec (x) //Типо этого
Как преоброзовать Десятичное число в восьмеричн[/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*** придумана ТОЛЬКО для удобства записи.
char buf[128];
sprintf(buf,"%X",a);//Пишем в буфер (строку) число а в HEX формате.
sscanf(buf,"%X",&a);//Считываем из строки число в формате HEX.
Для OCT (8ричный формат) - вместо %X пиши %o. Вот.
Надеюсь, ты просто неправильно подобрал пример.=))
Если ты попробуешь згачение вывести x, то (о чудо!) оно будет выведен как 15 - десятичное число. форма 0x*** придумана ТОЛЬКО для удобства записи.
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.
{
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ричное.
- В любом другом случае оно десятичное.
- Строка заведомо верна.
Так что тебе еще придется дорабатывать эту функцию.
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'???
U menya est vor takoy masiv
char mass[20];
char s[40];
i kakaya to stroka naprimer s="54+0x1F"
Есть ф-ия strtol().
Есть ф-ия strtol().
No ono ne proborozaet hex v dec...kak eto delat'??
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);
}
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
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++;
}
}
Пару микрозамечаний.
Если известно, что в строке пробела быть не может(судя по коду), то
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;
а для 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
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++. хоть там не баг, но лишняя операция. Макс. забыл обработку маленьких букв.