Programmieren - alles kontrollieren 4.941 Themen, 20.708 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 „@ mr.escape: DANKE!!! Hab jetzt aber wieder ein anderes Problem. Will die Daten,...“
Optionen
Will die Daten, die ich in der obigen Funktion berechnen will in einer Datei.
Sollte wohl "aus einer Datei" heissen.

Diese is im Hex Format (140 Hex Zahlen also).
Was heisst das denn? Ist es eine textdatei mit hex zahlen oder ist eher binär statt text gemeint? "test.txt" deutet auf textfile im hex format hin, währen "rb" in fopen() auf binär.

Funktion fgetc liest mir immer nur 1 Zeichen ein und wandelt in int um
Richtig, das ist fgetc, wie es leibt und lebt!

kann ich aber so nicht brauchen
Dann nimm doch fread:
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
also hier:
int l=fread(Infos_ohne_Mac, 1, 140, werte);
für den gesamten else zweig (d.h. inkl. der for schleife, wobei die else hier ja wegen exit() eigentlich überflüssig ist). Es muss aber sicher sein, dass genug daten gelesen werden (variable l sollte genau 140 haben, bzw. 136 wegen dem crc wert). Deine version ist aber gefährlicher, da einer der gefürchteten buffer overflow fehler sich darin versteckt (probier mal eine test.txt mit einigen megabytes aus, adios stack!).

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