21. august 2004 - 23:12Der er
28 kommentarer og 1 løsning
binært til hex og decimal
ja jeg ved jo at fuktionerne hex og decimal og octav for den sags skyld er bygget ind i enten stdio.h eller conio.h... men det er binært desværre ikke... jeg skal bruge en funktion der kan omregne binært til hex og dec (og som skal kunne komme med en fejlmeddelelse hvis man skriver 3-4-5-6-7-8-9-bogstaver-tegn)
men jeg kunne også godt tænke mig at forstå funktionerne til fulde... så det ville være godt med en forklaring til udtrykkene... :D på forhånd tak!
En af pointerne er at man ved at splitte op i inxxx og outxxx kan nøjes med 3+3 funktioner i.s.f. 3*3 (eller hvis man vil have oktaler med 4+4 i.s.f. 4*4).
char *s; /* indeholder streng der skal læses */ char *ep; int v; /* indeholder værdi læst */ v = strtol(s, &ep, 2); if(ep >= (s + strlen(s))) { /* OK */ } else { /* ups */ }
int inbin_1(char *s) { int res,ix; ix=0; res = 0; /* så længe der er tegn i strengen */ while(s[ix]!='\0') { /* returner -1 hvis ikke 1 eller 0 */ if(s[ix]!='1' && s[ix]!='0') return -1; /* akkumuler binært ciffer i resultat */ res = res * 2 + (s[ix]=='1' ? 1 : 0); ix++; } return res; }
int inbin_2(char *s) { char *ep; int v; /* konverter streng til tal med radix 2 (binært) */ v = strtol(s, &ep, 2); /* test om det første tal som ikke overholder radix ligger i enden af strenge */ if(ep >= (s+strlen(s))) { return v; } else { return -1; } }
jeg kan godt lide arne_v's 23:36:04 program men jeg kan ikke lige få det til at virke... det er for mig nemt overskueligt at forstå kodningen i det... feedback? :)
det prøvede jeg inden jeg skrev den besked der 17:08:09... men så kommer den med noget med at der er en fejl... finder lige hvor den er :)
/* Del af Arne_v's kode */
int main() { test("1100"); test("123"); return 0; }
output: // declaration syntax error
testing 1100 decimal = 12 hexadecimal = C decimal = 12 hexadecimal = C testing 123 fejl fejl
/* Slut på arne_v's kode */
det med at flette den ind i sammenhængen tror jeg ikke bliver så svær da den er med voids... har haft en del problemer med at flette int baserede dele ind i mit void program....
nu har jeg fået den til at virke.... men er lidt smadret lige nu... :P for at gøre det overskueligt... hvordan får jeg skrevet mit eget tal? og sådan noget...
jeg kan ikke lige finde ud af hvor jeg skal putte de ting der ind henne.... for at denne dig et overblik over hvor det burde sidde har jeg lige lagt mit program so far her:
gotoxy(22,6); cprintf("Tryk 1 for at regne Dec til Bin"); gotoxy(22,7); cprintf("Tryk 2 for at regne Dec til Hex"); gotoxy(22,8); cprintf("Tryk 3 for at regne Hex til Dec"); }
void menuto() {
decibina=getch(); switch(decibina)
{ case '1':
clrscr(); ramme();
gotoxy(22,6); cprintf("Dec til Bin: "); gotoxy(35,6); cscanf("%u",&dec);
gotoxy(22,8); cprintf("Dit tal i Bin: "); dectobin(); break;
case '2':
clrscr(); ramme();
gotoxy(22,6); cprintf("Dec til Hex: "); cscanf("%u",&hex);
gotoxy(22,8); cprintf("Dit tal i Hex: %X",hex); getch(); break;
case '3':
clrscr(); ramme();
gotoxy(22,6); cprintf("hex til dec: "); cscanf("%X",&dec);
gotoxy(22,8); cprintf("dit tal i dec: %d",dec); getch(); break; } }
gotoxy(22,6); cprintf("Tryk 1 for at regne Dec til Bin"); gotoxy(22,7); cprintf("Tryk 2 for at regne Dec til Hex"); gotoxy(22,8); cprintf("Tryk 3 for at regne Hex til Dec"); gotoxy(22,10); cprintf("Tryk 5 for at regne Bin til Dec"); }
void menuto() {
decibina=getch(); switch(decibina)
{ case '1':
clrscr(); ramme();
gotoxy(22,6); cprintf("Dec til Bin: "); gotoxy(35,6); cscanf("%u",&dec);
gotoxy(22,8); cprintf("Dit tal i Bin: "); dectobin(); break;
case '2':
clrscr(); ramme();
gotoxy(22,6); cprintf("Dec til Hex: "); cscanf("%u",&hex);
gotoxy(22,8); cprintf("Dit tal i Hex: %X",hex); getch(); break;
case '3':
clrscr(); ramme();
gotoxy(22,6); cprintf("hex til dec: "); cscanf("%X",&dec);
gotoxy(22,8); cprintf("dit tal i dec: %d",dec); getch(); break; case '5':
clrscr(); ramme(); gotoxy(22,6); cprintf("bin til dec: "); char num[33]; cscanf("%s",num); int dec = inbin(num);
gotoxy(22,8); cprintf("dit tal i dec: %d",dec); getch(); break; } }
int inbin(char *s) { char *ep; int v; v = strtol(s, &ep, 2); if(ep >= (s+strlen(s))) { return v; } else { return -1; } }
så er det kun logoet og finpudsningen er mangler :D mange tak!
så skal du vist have nogle point...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.