Programmieren - alles kontrollieren 4.936 Themen, 20.625 Beiträge

c-programm- crc32 berechnung von manufacturing infos

Nobody666 / 10 Antworten / Flachansicht Nickles

Hilfe!!! Anbei hab ich ein C-Programm, welches von manufacturing daten die checksumme in crc32 berechnen soll.


1. kann mir jemand sagen was:


 *((u32 *)&Manufactureing_Info [MANUFACTURING_INFO_SIZE -4]) = chksum bedeuten soll?


2. beim ausführen kommt Fehlermeldung:


 undefined reference to `util_gen_crc'


3. wo und wie übergebe ich die daten?


 


Vielen Dank schon mal im voraus!!!!!!!


 


#include <stdio.h>
#include <math.h>
typedef unsigned long u32;
#define MANUFACTURING_INFO_SIZE 140
#define CRC32_POLYNOMIAL 0xEDB88320


char Manufactureing_Info [MANUFACTURING_INFO_SIZE] = "43";



int main ()
{
 u32 chksum;
 chksum = ~ util_gen_crc (Manufactureing_Info, MANUFACTURING_INFO_SIZE -4, 0xffffffff);
 *((u32 *)&Manufactureing_Info [MANUFACTURING_INFO_SIZE -4]) = chksum;
 printf("Die checksumme ist: %08lx",chksum);
}
u32 util_gen_crc (char *pcDatabuf, u32 ulDatalen, u32 ulCrc_in)
{
 u32 idx, bit, data, crc;
 crc = ulCrc_in;
 for (idx = 0; idx < ulDatalen; idx++)
 {
  data = *pcDatabuf++;
  for (bit = 0; bit < 8; bit++, data >>=1)
  {
   crc = (crc >> 1) ^ (((crc ^ data) & 1) ? CRC32_POLYNOMIAL : 0);
  }
 }
 return crc;
}

bei Antwort benachrichtigen
mr.escape Nobody666 „Danke für die schnelle Antwort. Die Dateien, die ich lesen muß liegen in einem...“
Optionen
Die Dateien, die ich lesen muß liegen in einem .dat Format vor.
Ist die datei 140 bytes lang oder 280 oder gar 420,421 bzw. 422?
140=140 bytes binär d.h. char.
280=140 words binär d.h. short int
420=textfile im hex format, eine zeile
421=textfile im hex format, eine zeile mit 1 byte zeilenumbruch (unix style)
422=textfile im hex format, eine zeile mit 2 byte zeilenumbruch (dos style)
Was ist in notepad zu sehen, wenn diese datei damit geöffnet wird? Datenmüll oder diese zahlenreihen?

am Schluß 140 Zahlenpaare
Ist für dich 43 ein zahlenpaar oder 43 00?

Was für eine Version würdest du denn vorschlagen, um einen buffer overflow zu vermeiden?
Abbruch nach 140 zahlen (bytes oder was auch immer, je nach dem was tatsächlich gemeint ist, momentan char, wegen dem sourcecode).

was mach ich dann eigentlich mit dem int I? Kann ich den auch weglassen?
int l bedeutet, dass eine int variable namens l eingeführt wird (l wie länge, in dieser form nur in c++, d.h. nur direkt nach einer geschweiften klammer wenn c antstelle von c++ verwendet wird), und nein sie ist nicht erforderlich (gibt lediglich an, wieviele datensätze mit der grösse "size" geladen wurden, bei size=1 also die anzahl der bytes).

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