22. november 2001 - 21:39
Der er
18 kommentarer og 1 løsning
Jeg er blank lige nu :D
Efter et par timers coding hvor jeg konverterer tal den ene vej, er jeg gået kold over for den anden.. :D Lad os sige jeg skal lave tallet 08AB om til 10 talssystemet.. jeg regner med at jeg skal bruge en funktion der henter det et af tallene af gangen og ganger dem ud.. men hvordan og hvilken funktion ?? og jeg kunne forestille mig det skulle lægges i et array ? afhængig af hvilken side begynder i.. (skal max arbejde med 16 bit ;) )
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
22. november 2001 - 21:44
#1
splitter det et tal af gangen fra højre side. Så starter du med et B som du konverter til 11. Dette ligger du i en sum variable. Næste er A som er 10 som du ganger med 16, da det står på anden plads. Dette ligger du oven i sum vairablen. Dernæst 8 som konverteres til 8 som du ganger med 16*16 ( da det står på treedje plads) og som igen lægges til summen. Bliv ved indtil der ikke er flere tegn! :)
23. november 2001 - 08:46
#2
flot flot.. jeg ved godt hvordan man konverterer det selv.. men hvordan skal jeg skrive en funktion der gør det ?? :p
23. november 2001 - 09:39
#3
Sådan her f.eks.: #include <string.h> #include <stdio.h> #include <conio.h> int HexToInt(char *buffer) { int tmpInt = 0; for (int idx = 0; idx < strlen(buffer); idx++) { tmpInt *= 16; if (buffer[idx] >= \'0\' && buffer[idx] <= \'9\') tmpInt += (int)(buffer[idx]-\'0\'); else tmpInt += (int)(10 + buffer[idx]-\'A\')); }; return tmpInt; } int main(void) { char *aHexValue = \"08AB\"; cprintf(\"Værdien %s hex = %d decimalt.\\r\\n\", aHexValue, HexToInt(aHexValue)); return 0; }
23. november 2001 - 09:59
#4
den virkede ikke ... :(
23. november 2001 - 10:38
#5
Hvad f..... mener du med den ikke virkede - programmet oversætter meget præcist en hex-værdi til et decimal tal - den gør det overikøbet rigtigt !
23. november 2001 - 10:48
#6
Især hvis man lige fjerner den ekstra parentes, som copy/paste gav: #include <string.h> #include <stdio.h> #include <conio.h> int HexToInt(char *buffer) { int tmpInt = 0; for (int idx = 0; idx < strlen(buffer); idx++) { tmpInt *= 16; if (buffer[idx] >= \'0\' && buffer[idx] <= \'9\') tmpInt += (int)(buffer[idx]-\'0\'); else tmpInt += (int)(10 + buffer[idx]-\'A\'); // Her var en ekstra parentes. }; return tmpInt; } int main(void) { char *aHexValue = \"08AB\"; cprintf(\"Værdien %s hex = %d decimalt.\\r\\n\", aHexValue, HexToInt(aHexValue)); return 0; } Sorry !
23. november 2001 - 13:03
#7
jeg har brug for at den kan tage imod userinput :D men den driller lidt med det ! ellers virker koden fint . så tak der
23. november 2001 - 13:42
#8
phpnewbie >> FLOT, flot selv. Skal nok lade være med at poste noget i dine tråde mere!
23. november 2001 - 14:37
#9
tak.. det var godt..
23. november 2001 - 15:31
#10
int main(int, char* argv[]) { cprintf(\"%s Hex = %d decimal.\\r\\n\", argv[1], HexToInt(argv[1])); return 0; }
23. november 2001 - 15:32
#11
Så kan du kalde programmet med f.eks. hextoint.exe 08AB
26. november 2001 - 10:30
#12
ye ok.. men skal bruge det sådan at den prompter useren for det.. ikke at man skal gøre det ved kørslen... Hvis du kan fixe det får du 50 ekstra points :D
26. november 2001 - 10:34
#13
cin.....
26. november 2001 - 10:35
#14
ja .. har prøvet cin.. men den kommer med alle mulige errors.. så som size og sådan.. har næsten prøvet alt.. :(((
26. november 2001 - 10:45
#15
Hvis du kører under DOS, skal du selv lave en ordentlig input-rutine vha. getch() kommandoen: #include <conio.h> #include <mem.h> const int ESC = 0x1B; const int ENTER = 0x0D; const int BACKSPACE = 0x08; char * getstr(int maxLen) { static char keyPressed; static char tmpStr[128]; keyPressed = 0x0; memset(tmpStr, \'\\x0\', sizeof(tmpStr)); while (keyPressed != ESC && keyPressed != ENTER) { switch ((keyPressed = getch()) { case ESC : // Done - abort loop and return nothing. break; case ENTER : // Done - return string case BACKTAB : // Clear last character tmpStr[strlen(tmpStr)-2] = \'\\x0\'; putc(BACKTAB); break; default : Normal key. if (strlen(tmpStr) >= maxLen) putch(\'\\a\'); else { sprintf(tmpStr+strlen(tmpStr), \"%c\", (char)keyPressed); putch(keyPressed); } break; }; // Switch }; // Until ESC or ENTER if (keyPressed == ENTER) return tmpStr; else return NULL; } I din main skriver du så noget i stil med: : char hexVal[7]; cprintf(\"Indtast det hexadecimale nummmer (max 6 cifre): \"); hexVal = getstr(6); if (strcmp(hexVal, \"\") != 0) cprintf(\"%s Hex = %d decimal.\\r\\n\", hexVal, HexToInt(hexVal)); else cputs(\"Intet tal indtastet.\\r\\n\"); :
26. november 2001 - 10:46
#16
Oops - der mangler en break; efter case ENTER og inden case BACKTAB: case ENTER : // Done - return string break; case BACKTAB : // Erase last character.
26. november 2001 - 10:47
#17
phpnewbie >> hvor getstr selvfølgelig kan forfines meget mere - men det er vist en anden opgave.
26. november 2001 - 10:52
#18
ok .. tak kigger lige på det en gang.. takker mange gange :D
26. november 2001 - 23:28
#19
jo tak.. funktionen virker perfekt.. og nu har jeg fixet et userinput .. :D mange tak
Kurser inden for grundlæggende programmering