HEX CONVERTER
-
ich will einen TEXT, den ich aus einer Datei auslese, in ASCII Code und HEX code umwandeln, aber ich weis aber nicht wie ich das machen soll. Ich habe schon den Code fuer Auslesen der Datei, der folgend aussieht:
#include <stdio.h>
#include <string.h>int main( )
{FILE *pFile = fopen( "hex.txt", "r" );
if (pFile == NULL) perror ("Error opening file");
int i ;
char inhalt[1024];
while( fgets(inhalt, 1024, pFile) != NULL )
{
for ( i = 9; i <= (strlen(inhalt) - 4); i++){
printf("%c", inhalt[i]);
}printf("\n",inhalt[i]);
}
fclose( pFile );
return 0;
}Diesen Text :
1001000021460121470136007EFE09D2190140soll ich so loesen, aber ich weis nicht ob es so geht:
10 + 01 + 00 + 00 + 21 + 46 + 01 + 36 + 01 + 21 + 47 + 01 + 36 + 00 + 7E + FE + 09 + D2 + 19 + 01 = 3C0
Kann mir jemand Helfen ?
Danke
-
Hi!
Was is denn das Problem? In der Datei steht
1001000021460121470136007EFE09D2190140
Und du willst das einfach aufsplitten oder was?
grüße
-
er soll mir diesen Text in ASCII Code umwandeln, und anschlissend am Bildschirm ausgeben.
Der Haken ist das er erst ab 10 Stelle Liest und die Letzten zwei sollen nicht betrachtet werden.
1001000021460121470136007EFE09D2190140
Und das weis ich nicht wie ich das machen soll!!
-
Und weil du beim letzen Thread nichts mehr kapiert hast eröffnest du einen neuen unter neuem Namen?
:p
Der Umzuwandelnde Code ist auf jeden Fall exakt derselbe
-
- Aufgabenstellung deutlich formulieren (was hat es mit der "Rechnung" auf sich? Warum sind in dieser "Rechnung" die "unwichtigen" Zeichen mit drin?)
- [cpp]-Tags verwenden.
- Dann noch dies und das lesen.
-
Ich will einen HEX Code der aus laute Nummern und Buschtaben enthaelt, in ASCII Code umwandeln. Der Code sieht ungefaehr so aus:
21456780120016A23EFF0987234C7
Und ich komme nicht weiter, weil ich nicht weiss wie ich den Code umwandel soll !
-
du könntest immer zwei zeichen einlesen und dann "wert = 16*(zeichen1-'0') + zeichen2-'0'" oder so ähnlich
-
Wie kann man disen code den ich aus einer datei auslese, in ASCII Code umwandeln :
214601360121470136007EFE09D21901
2146017EB7C20001FF5F160021480119
00FF
194E79234623965778239EDA3F01B2CA
3F0156702B5E712B722B732146013421
-
C_Anfaenger80 schrieb:
Wie kann man disen code den ich aus einer datei auslese, in ASCII Code umwandeln :
214601360121470136007EFE09D21901
2146017EB7C20001FF5F160021480119
00FF
194E79234623965778239EDA3F01B2CA
3F0156702B5E712B722B732146013421So z.B.?
unsigned char *hex = "214601360121470136007EFE09D21901"; unsigned char *cp = hex; unsigned char ascii[100]; unsigned char *ap = ascii; while(*cp) { *ap = 0; switch(*cp) { case '0': *ap = 0; break; case '1': *ap = 16; break; case '2': *ap = 32; break; ... usw. ... case '9': *ap = 144; break; case 'A': *ap = 160; break; case 'B': *ap = 176; break; ... usw. ... case 'F': *ap = 240; break; default: *ap = 0; break; /* Non-HEX-Zeichen! */ } cp++; switch(*cp) { case '0': *ap += 0; break; case '1': *ap += 1; break; case '2': *ap += 2; break; ... usw. ... case '9': *ap += 9; break; case 'A': *ap += 10; break; case 'B': *ap += 11; break; ... usw. ... case 'F': *ap += 15; break; default: *ap = 0; break; /* Non-HEX-Zeichen! */ } cp++; ap++; } *ap = 0;
-
Miq schrieb:
C_Anfaenger80 schrieb:
Wie kann man disen code den ich aus einer datei auslese, in ASCII Code umwandeln :
214601360121470136007EFE09D21901
2146017EB7C20001FF5F160021480119
00FF
194E79234623965778239EDA3F01B2CA
3F0156702B5E712B722B732146013421So z.B.?
unsigned char *hex = "214601360121470136007EFE09D21901"; unsigned char *cp = hex; unsigned char ascii[100]; unsigned char *ap = ascii; while(*cp) { *ap = 0; switch(*cp) { case '0': *ap = 0; break; case '1': *ap = 16; break; case '2': *ap = 32; break; ... usw. ... case '9': *ap = 144; break; case 'A': *ap = 160; break; case 'B': *ap = 176; break; ... usw. ... case 'F': *ap = 240; break; default: *ap = 0; break; /* Non-HEX-Zeichen! */ } cp++; switch(*cp) { case '0': *ap += 0; break; case '1': *ap += 1; break; case '2': *ap += 2; break; ... usw. ... case '9': *ap += 9; break; case 'A': *ap += 10; break; case 'B': *ap += 11; break; ... usw. ... case 'F': *ap += 15; break; default: *ap = 0; break; /* Non-HEX-Zeichen! */ } cp++; ap++; } *ap = 0;
WTF???
Oh, shit!
-
Wie kann man auf den Ganzen Text zugreifen,und nicht ZEILENWEISE zum beispiel aus einer Datei ?
-
David_pb schrieb:
Miq schrieb:
...
WTF???
Oh, shit!
Was soll mir das sagen? Dass es auch kürzer/eleganter/schneller geht? Klar, nur hilft das C_Anfaenger80? Soll er doch selber lernen, oder?
-
Hi!
Das soll, bei aller Freundlichkeit, sagen das ich irgendwie einen leichten Magenkrampf bekommen habe bei dem Code...
Dass das noch zu optimieren ist müsstest du auch selbst sehen!
grüße
-
Willst Du ihm gleich so was wie
*ap++=((*cp>'@'?*cp-'A':*cp-'0')<<4)|(*++cp>'@'?*cp-'A':*cp-'0');++cp;
vorsetzen, oder wie?
Die Optimierung kriegt er später selbst, erstmal muss er das Grundprinzip verstehen.
-
hi,
hier mal eine bisserl kürzere Variante, die auch nem Anfänger vorgesetzt werden kann, denk ich ...#include <stdio.h> int main() { char *hex = "214601360121470136007EFE09D21901"; char tmp[3] = {0, 0, '\0'}; char *ptr = hex; int value; while (*ptr) { tmp[0] = *ptr++; tmp[1] = *ptr++; /* sscanf( tmp, "%X%X", &value ); <= ein %X reicht! thx@net */ sscanf( tmp, "%X", &value ); printf( "%d\n", value ); } return 0; }
Vorsicht: Das Durchlaufen des Strings geht hier von ner geraden Anzahl von Zeichen aus!
grüße
-
Sepp Brannigan schrieb:
sscanf( tmp, "%X%X", &value );
zweimal %x ?
-
net schrieb:
Sepp Brannigan schrieb:
sscanf( tmp, "%X%X", &value );
zweimal %x ?
oops, gut aufgemerkt - eins reicht natürlich! Aufgrund der Toleranz von scanf ist mir der Fehler nicht aufgefallen.
-
Sepp Brannigan schrieb:
Aufgrund der Toleranz von scanf ist mir der Fehler nicht aufgefallen.
zufall. scanf hat sich als 2ten parameter was vom stack geholt, das es nicht als hexwert darstellen konnte. harmlos in den meisten fällen....
-
net schrieb:
Sepp Brannigan schrieb:
Aufgrund der Toleranz von scanf ist mir der Fehler nicht aufgefallen.
zufall. scanf hat sich als 2ten parameter was vom stack geholt, das es nicht als hexwert darstellen konnte. harmlos in den meisten fällen....
Gute Frage, was da scanf genau macht - tmp ist ja nach dem ersten hex-wert terminiert - da gibts also nix mehr. Was aber bei Bedarf vom Stack geholt wird, sollte doch in dem Fall die Zieladresse für den zweiten Wert sein, oder? (aufgr. variabler Parameterliste) und das könnte dann schon evtl. schon Probleme geben ...
Hab das Ganze mal ein bisschen ausgebaut um nen Fehler zu provozieren ...... char tmp[] = {0, 0, ' ', 0, 0, ' ', 0, 0, ' ', 0, 0, '\0'}; ... tmp[0] = *ptr++; ... tmp[10] = *ptr++; sscanf( tmp, "%X %X %X %X", &value ); ...
ergibt: "Bus error (core dumped)" - Zitat ende
Quad erat expectare - oder so ähnlich (Lateinkenner vor ;))
-
Danke an eurer HILFE, nur noch eine Frage, ich habe versucht den **die Text Datei anzeigen, damiter aus Sie lesen kann. Aber wenn ich das mache gibt er mir nur NULLEN am Bildschirm zurueck..
Ich habe mit fopen versucht aber es ging nicht. Mit diesen Programm liest er den ganzen text aus einer Datei ein, aber er wandelt nur die eingegebene Zeile(weil ich nicht geschaft habe den ganzen texe einzulesen). Wie kann man den Ganzen Text einlesen ?#include <stdio.h>
#include <string.h>int main( )
{int a;
[b]char hex = "2143E2312FFE21006700432";
char tmp[3] = {0, 0, '\0'};
char ptr = hex;
int value;printf("1: Binaer Ausgabe\n");
printf("2: ASCII Ausgabe\n");
scanf("%d",&a);// Parameter 1 des Aufrufs ist die Quelldatei
FILE *pFile = fopen( "hex.txt", "r" ); //Einlesen der Text Datei
if (pFile == NULL) perror ("Error opening file");
//Zählvariable i für die Ausgabe
int i ;
char inhalt[1024];
switch(a)
{
case 1:while( fgets(inhalt, 1024, pFile) != NULL )
{
for ( i = 9; i <= (strlen(inhalt) - 4); i++){
printf("%c", inhalt[i]);
}printf("\n",inhalt[i]);
}
fclose( pFile );break;
case 2:
while (*ptr)
{
tmp[0] = *ptr++;
tmp[1] = *ptr++;
sscanf( tmp, "%X ", &value );
printf( "%d\n ", value );
}
break;}
return 0;
}