char in hex umwandeln
-
Hallo!
Ich bräuchte ganz dringend mal Hilfe. Ich soll eine function schreiben, die Folgendes leistet. Sie bekommt einen string übergeben, in dem lauter Dezimalzahlen stehen, die durch Kommata getrennt sind. Diese sollen nun alle in hex umgewandelt werden und dann an eine schon definierte, prinf Funktion übergeben werden. Problem dabei ist, dass ich keine Funktionen aus Bibliotheken nehmen darf und auch sowas wie printf und sprintf entfallen. Kann mir jemand sagen, wie ich dieses Problem löse?
Danke schon mal...
-
Nimm die Zahl, die du umwandeln willst. Nimm den Rest der Division durch 16 und wandel diese Zahl in ein Zeichen von 0 bis F. Jetzt hast du die letzte Stelle der Zahl als Zeichen. Teile nun die Zahl durch 16. Von der neuen Zahl nimmst du den Rest der Division durch 16 und wandelst sie wieder in ein Zeichen. Nun hast du die vorletzte Ziffer. Mach das so lange, bis die Zahl durch 16 geteilt 0 ergibt.
Das ganze musst du natürlich mit Integern machen. Das ist nur eine von vielen Möglichkeiten, du kannst dir auch selber eine ausdenken.
-
Ganz einfach mache ich es dir ja nicht, aber gab es da nicht bei C einen Inline-Assembler? Wenn ja schreib eine Funktion, mit dem Parameter "str", dem Auszugebenden String. Der MUSS auf "$" enden und darf keines mittendrin haben.
danach kopierst du das hier in den Funktionskörper:lea dx,str ;String-Adresse laden mov ax,0900h ;Funktion auswählen int 21h ;Interrupt starten. s. Google für nähere Infos ret ; Rücksprung
Der Code funzt auch in der DOS-Box, also sollte deine print-Fkt. hiermit erledigt sein. Wenn du willst, kannst du die Fkt. noch komfortabler machen($ selbst hinten dran hängen, würgaround für $-Zeichen), aber das bleibt dir überlassen.
Tschö,
nullplan
-
So, habe mich jetzt mal eingeloggt...
Hab das jetzt mal so probiert, wie ProgChild vorgeschlagen hat. Das umwandeln von Zahlen <17 klappt jetzt prima, nur weiß ich jetzt nicht, wie ich die einzelnen chars wieder zu einem zusammenfassen kann... das versuche ich jetzt mal herauszufinden.
@nullplan002: Vielen Dank! Ich wusste bisher noch nicht mal, dass es sowas überhaupt gibt. Ich werde gleich mal ein wenig googlen und versuchen, dass zu verstehen; ansonsten würde Dein Vorschlag ja sicherlich der EFFIZIENTEN Funktion, die ich schreiben soll, sehr nahe kommen...
-
Hab das Programm jetzt fertig; kann man da auf die Schnelle noch was optimieren?
//Calculate Int 2 Hex from String #include <stdio.h> #include <stdlib.h> void int2hex(int number){ char hexdigit[] = "0123456789ABCDEF"; char hexnum[7]; char buffer; int i = 0; while(number){ buffer = hexdigit[(number % 16)]; number /= 16; hexnum[i++] = buffer; } char result[i]; int l; for(l = i-1; l >=0; l--){ result[l] = hexnum[l]; printf("%c", result[l]); } //here: Print(result); } void filter(char *string){ int decimal = 0; while(*string){ if(*string == ','){ int2hex(decimal); decimal = 0; } else if(*string == ' '){ } else{ decimal = decimal*10 + (*string - '0'); } *string++; } } int main(int argc, char *argv[]){ char string [8] = {'7','8',',',' ','1','0',','}; //int2hex(10000); filter(string); system("PAUSE"); return 0; }
-
Meint er vieleicht das?
char ch = 25; printf("Dezimal: %d\n", ch); printf("Hexadeziaml: 0x%08X\n", ch); printf("Wieso gleich so komplitziert denken?\n\n\n");
-
Naja,
wenn ohne Funktionen dann gleich alles in ASM z.B
schnell, klein etc.