datei hexadezimal in Win32 - Konsole
-
ich will die Datei auslesen, und dann hexadezimal byte für byte ausgeben.
ich will nur die <windows.h> benutzen.
Wie mach ich das ??
-
Naja, du benützt die FileStream-Funktionen aus der windows.h - besser wäre aber die Datei per Sprachstandard auszulesen - siehe dazu in der C++-FAQ.
MfG SideWinder
-
mir ist schon klar, dass ich die filestream-Funktionen der <windows.h> benutzen muss, ich weiß nur nicht wo ich was angeben muss, um mein ziel zu erreichen!
gibts irgendwo ne funktion, die das regelt, oder wie?dHandle = CreateFile ("Filename", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
jetzt is die Datei offen, aber wenn ich ReadFile einsetzte, bekomm ich ja nur chars !!
[ Dieser Beitrag wurde am 30.04.2003 um 22:41 Uhr von N00Bie editiert. ]
-
Du bekommst einen Wert zwischen 0 und 255 - das kann ein char sein, ist aber auch leicht als Byte zu interpretieren.
MfG SideWinder
-
Original erstellt von SideWinder:
**Du bekommst einen Wert zwischen 0 und 255 - das kann ein char sein, ist aber auch leicht als Byte zu interpretieren.
**mein rechner ist kaputt. bei mir kommen zahlen zwichen -128 und 127 raus.
-
Ja okay war wieder mal ein Schlampigkeitsfehler
MfG SideWinder
-
bei mir kommen auch die Zahlen, wie be´komm ich Zahlen von 0 bis 255 ?? ich hab das hier geschrieben, um es hexadezimal zu kriegen. Man übergiebt einfach das ausgelesene Zeichen, und ein Zeiger auf das Array in das das Ergebnis rein soll
bitterschön:bool umwandeln (char x, char * cAusgabe) { char array[50]; wsprintf(array, "Zahl: %d", (int) x); MessageBox (0, array, "Achtung:", MB_OK); switch (x%16) { case 0: cAusgabe[1] = '0'; break; case 1: cAusgabe[1] = '1'; break; case 2: cAusgabe[1] = '2'; break; case 3: cAusgabe[1] = '3'; break; case 4: cAusgabe[1] = '4'; break; case 5: cAusgabe[1] = '5'; break; case 6: cAusgabe[1] = '6'; break; case 7: cAusgabe[1] = '7'; break; case 8: cAusgabe[1] = '8'; break; case 9: cAusgabe[1] = '9'; break; case 10: cAusgabe[1] = 'A'; break; case 11: cAusgabe[1] = 'B'; break; case 12: cAusgabe[1] = 'C'; break; case 13: cAusgabe[1] = 'D'; break; case 14: cAusgabe[1] = 'E'; break; case 15: cAusgabe[1] = 'F'; break; default: cAusgabe[1] = 'X'; break; } switch ((x -(x%16))/16) { case 0: cAusgabe[0] = '0'; break; case 1: cAusgabe[0] = '1'; break; case 2: cAusgabe[0] = '2'; break; case 3: cAusgabe[0] = '3'; break; case 4: cAusgabe[0] = '4'; break; case 5: cAusgabe[0] = '5'; break; case 6: cAusgabe[0] = '6'; break; case 7: cAusgabe[0] = '7'; break; case 8: cAusgabe[0] = '8'; break; case 9: cAusgabe[0] = '9'; break; case 10: cAusgabe[0] = 'A'; break; case 11: cAusgabe[0] = 'B'; break; case 12: cAusgabe[0] = 'C'; break; case 13: cAusgabe[0] = 'D'; break; case 14: cAusgabe[0] = 'E'; break; case 15: cAusgabe[0] = 'F'; break; default: cAusgabe[0] = 'X'; break; } return true; }
-
bool umwandeln (unsigned char x, char * cAusgabe) { char array[50]; wsprintf(array, "Zahl: %d", (int) x); MessageBox (0, array, "Achtung:", MB_OK); cAusgabe[0]="0123456789ABCDEF"[x/16]; cAusgabe[1]="0123456789ABCDEF"[x%16]; cAusgabe[2]='\0'; return true; }
-
so was is mir jetzt noch nie untergekommen, kannste des mal erklären?
-
"0123456789ABCDEF" ist ein array of char und da kann ich dann wie bei jedem array mit [] darf zugreifen.
also das hier
bla="0123456789ABCDEF"[x%16]
ist das gleiche wie das hier
char array[]="0123456789ABCDEF";
bla=array[x%16]und beim / hab ich das -x%16 weggemacht, weil der beim / eh abrundet.
-
thx