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
Dreamforger Nobody666 „C-Programm liefert falsche Ausgabe“
Optionen

Erstmal die Reihenfolge:

>> wird vor & ausgeführt

A>>B schiebt das Bitmuster in A um B Bits nach rechts. Jede Stelle die nach rechts geschoben wird ergibt eine division durch 2, aber das wird hier garnicht verwendet. Hier geht es nicht darum das das Bitmuster verschoben wird. z.B 1100111 >> 2 = 0011001

C & D setzt im Ergebniss alle Bits die sowohl in A als auch in B gesetzt sind. Z.B 1100111 & 0011001 = 0000001

Zur Anwendung in diesem Fall:

adress wird um vielfache von 8 Bit nach rechts geschoben. 8 Bit = 1 Byte = Zahl zwischen 0 und 255 = Zahl zwischen 0 und 0xff

Die verschobene Zahl wird jetzt mit 0xff maskiert (ge-&-ed). Das ergebniss dieser Übung ist also jeweils ein byte nach dem anderen der adresse.

Wenn Adresse = 0x356a4b7c4 dann werden mit zunehmendem i der Reihe nach 0xc4, 0xb7, 0x6a und 0x35 zurüchgegeben

bei Antwort benachrichtigen