Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

C-Programm liefert falsche Ausgabe

Nobody666 / 4 Antworten / Flachansicht Nickles

Hallo, hab ein C-Programm mit dem GCC-Compiler geschrieben und es funktioniert. Selbes Programm mit dem QC2 compiliert, auch ohne fehler, aber falsche Ausgabe. Denke dass GCC ja ein C++ Compiler ist und der andere ein reiner Compiler, aber .exe ist doch eigentlich .exe aber amscheinend nicht. Kann mir jemand helfen?


Anbei ein kleiner Auszug, der mir beim GCC das gewünschte bringt und mit dem QC2 was falsches


 sprintf(schreibe,"S308%08lX%06lX",Adress,SerialNumber); //in Form -om als String in schreibe gespeichert
 //aufspalten des Strings in 2er hex Zahlen(zur pruefsummenberechnung):
 for (i=0; i<=8;i++) {
  sscanf(schreibe+i*2,"%2X",&aufspaltung[i]);
  }
 //summieren der hexzahlen(i=1, da S3 nicht mitberechnet):
 for(i=1;i<=8;i++) {
  pruefsumme+=aufspaltung[i];
  }
 // Umwandlung in einen String zum Verändern(nur letzten 2 Stellen sollen angezeigt werden):
 sprintf(pruefende,"%016X", 0XFF - pruefsumme); //geraetespezifisch von FF abgezogen
 //trennen des Strings in 2er hex Zahlen(die letzte ist entscheident):
 for (i=0; i<=7;i++) {
  sscanf(pruefende+i*2,"%2X",&trenne[i]);
  }
 if(Darstellung==2){
 //schreiben der Hexnummern in Form -oi(123456->563412):
 fprintf(fp,"S308%08X%02X%02X%02X",Adress,aufspaltung[8],aufspaltung[7],aufspaltung[6]);}

bei Antwort benachrichtigen
mr.escape Nobody666 „C-Programm liefert falsche Ausgabe“
Optionen

Das erste sprinf und die ersten zwei for schleifen würde ich durch:

for(i=0, pruefsumme=0;i>(i*8))&0xff;
for(i=0;i>(i*8))&0xff;

ersetzen (sprinf und sscanf sind overkill, einfache mathematik reicht).
Ob "sprintf(pruefende,"%016X", 0XFF - pruefsumme);" tatsächlich eine 16 stellige hex zahl ausgibt halte ich für sehr fraglich, speziell wenn "pruefsumme" nur eine normale int variable ist.

Das zweite sprintf und die folgende for schleife würden dann zu:
for(i=0;i>(i*8))&0xff;

Schlussendlich das fprintf:
fprintf(fp,"S308%08X%02X%02X%02X",Adress, SerialNumber&0xff, (SerialNumber>>8)&0xff, (SerialNumber>>16)&0xff);
oder vielleicht so:
fprintf(fp,"S308%08X%02X%02X%02X",Adress, ((unsigned char *)&SerialNumber)[0], ((unsigned char *)&SerialNumber)[1], ((unsigned char *)&SerialNumber)[2]);

also alles zusammen:
for(i=0, pruefsumme=0;i>(i*8))&0xff;
for(i=0;i>(i*8))&0xff;

for(i=0;i>(i*8))&0xff;

if(Darstellung==2){
//schreiben der Hexnummern in Form -oi(123456->563412):
fprintf(fp,"S308%08X%02X%02X%02X",Adress, SerialNumber&0xff, (SerialNumber>>8)&0xff, (SerialNumber>>16)&0xff);
}

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen