Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

Hilfe mit C-Programm

Nobody666 / 12 Antworten / Flachansicht Nickles

Hallo,


hab hier anbei ein C-Programm. Es sollte am Ende so etwas wie S3 0A 00 00 00 4B 31 00 04 10 01 9B herauskommen(ohne Blanks). S3 ist hier fest, 09 sollte die anzahl der nachfolgenden Bytes sein, dann kommmen eine 4 Byte lange hexZahl, anschließend eine 5 Byte lange hexZahl und das letzte Byte sollte die Summe der Zahlen ab S3 sein.


Kann mir bitte jemand erklären, wie das ganze funktioniert, da ich es ein wenig umschreiben muß???


Danke


 


void OutputMotorolaFormat(FILE *fp, unsigned long addr, char *buffer, unsigned nbytes)
{
   unsigned i, j, bytecount, sumcheck;
   char c, *ptr = buffer;
   unsigned long localaddress = addr;


   for (i = 0; i < nbytes; i += 16) {
      bytecount = nbytes - i;
      if (bytecount > 16) bytecount = 16;
      fprintf(fp, "S3%02X%08lX", bytecount + 5, localaddress);
      sumcheck = bytecount + 5;
      for (j = 0; j < 3; j++)
         sumcheck += (localaddress >> (8 * j)) & 0xFF;
      for (j = 0; j < bytecount; j++) {
         fprintf(fp, "%02X", (int)(c = *ptr++));
         sumcheck += c;
      }
      fprintf(fp, "%02X\n", ~sumcheck & 0xFF);
      localaddress += bytecount;
   }
}

bei Antwort benachrichtigen
Nobody666 Andreas42 „Hi! Öh, schwierig... und dabei bin ich kein C-Spezialist . OK, langsam und von...“
Optionen

Hallo,
erstmal danke für die schnelle Antwort. Ist keine Hausaufgabe, will ein kleines Tool schreiben.
Also, hab eine 12 stellige Dezimalzahl (210453663745). Diese ist in einer Variablen gespeichert.
Ebenso hab ich einen hexawert in einer anderen Variablen gespeichert.
Aussehen soll das ganze nun so, und das Programm soll das irgendwie so ähnlich machen, funktioniert aber nicht:
S3 steht fest am Anfang, danach kommt eine Hexzahl, die die Anzahl der nachfolgenden Bits ausgibt. Hier 0A. Auch kein Problem.
Jetzt muß ich den Hexawert in der einer 4 Bit großen Hexdarstellung ausgeben. Geht auch einfach mit 08lx.
So, jetzt muß ich die Dezimalzahl verarbeiten, und zwar soll das ganze
so aussehen. 210453663745 wird zu 31 00 04 10 01 (ohne Blanks). 31000 muß auch noch vorangefügt werden.
Ist also Dezimalzahl in Hexaformat von hinten gelesen. Das ist mein erstes Problem. Am Schluß soll noch eine Summe dieser Zeile ab dem S3 stehen,in der Form: FF - (0A+00+00+00+4B+31+00+04+10+01).
Am Ende sollte also dastehen:
S30A0000004B310004100164
Wäre über Hilfe sehr dankbar, bin mit Latein und Nerven mehr als am
Ende!!!!

bei Antwort benachrichtigen
Hilfe mit C-Programm Nobody666
Hilfe mit C-Programm Andreas42
Hilfe mit C-Programm Nobody666