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
mr.escape Nobody666 „c-programm- crc32 berechnung von manufacturing infos“
Optionen
1. kann mir jemand sagen was:
*((u32 *)&Manufactureing_Info [MANUFACTURING_INFO_SIZE -4]) = chksum bedeuten soll?

Da wird der errechnete 32bit crc wert, d.h. 4 bytes in die letzten 4 bytes des char arrays gespeichert (C typisch brutal unleserlich formuliert, muss man sich dran gewöhnen).

2. beim ausführen kommt Fehlermeldung:
undefined reference to `util_gen_crc'

Es wird die funktion util_gen_crc aufgerufen, ohne definiert zu sein (sie wird erst weiter unten definiert). Lösung main() hinter der funktion definieren oder sie früher deklarieren (einfach "u32 util_gen_crc (char *pcDatabuf, u32 ulDatalen, u32 ulCrc_in);" vor main einfügen)

3. wo und wie übergebe ich die daten?
Welche daten ? In "Manufactureing_Info" steht die zeichenkette "43" (3 bytes) und danach 137 zufällige zeichen, von denen die letzten vier bei der crc bildung nicht beachtet sondern mit dem crc wert überschrieben werden.

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