Programmieren - alles kontrollieren 4.935 Themen, 20.621 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
Nobody666 mr.escape „ Sollte wohl aus einer Datei heissen. Was heisst das denn? Ist es eine textdatei...“
Optionen

Danke für die schnelle Antwort.
Die Dateien, die ich lesen muß liegen in einem .dat Format vor.
Ein Beispiel wie sie in dieser Datei liegen ist:
43 00 00 8C 00 20 61 10 ... insesamt mit der Summe am Schluß 140 Zahlenpaare. Dort muß ich dann an bestimmten Stellen Zahlen überschreiben und dann chksum ausführen.

Was für eine Version würdest du denn vorschlagen, um einen buffer overflow zu vermeiden?

int I=fread(Infos_ohne_Mac,1,140,werte);
hab ich ausprobiert, bringt mir aber immer noch den gleichen Wert, auch wenn ich für size_t count 2 eingebe!?? -Seufz-
was mach ich dann eigentlich mit dem int I? Kann ich den auch weglassen?

bei Antwort benachrichtigen