... ich habe mir ein paar funktionen geschrieben, um CRC32-Prüfsummen zu berechnen... alles perfekt... ich kriege die werte dezimal, da ich sie aber hexadezimal haben will, abe ich mir dazu eine funktion geschrieben:
UInt16 GetHex(Int32 integer, char result[8]) {
UInt16 i, cnt=0;
float reste[16] = {0,0.0625,0.125,0.1875,0.25,0.3125,0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375};
char hex[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
float neuint, diff, rawint, original = (float)integer;
UInt32 rest;
for(i=0;i<=9;i++) {
result[i] = '0';
}
do {
neuint = original/16.00;
rawint = (int)(original/16);
diff = neuint-rawint;
for(i=0;i<=15;i++) {
if(diff==reste[i]) {
rest=i;
}
}
result[9-cnt]=hex[rest];
original = rawint;
cnt++;
} while(rawint>0);
return cnt;
}
Alles anzeigen
dabei ist integer die dezimalzahl, von der der hexadezimale wert generiert werden soll,
result[8] ist die rückgabe der funktion,
neuint ist die aktuelle zahl, durch 16 geteilt,
rawint ist das gleiche, nur ohne nachkommastellen,
diff ist der unterschied, also der rest zwischen den beiden,
rest ist der rest im aktuellen schleifendurchgang,
cnt ist die anzahl der schleifendurchgänge.
ich hoffe ich hab alles wichtige erklärt... die Rechenweise findet man hier: Wikipedia
soweit funktioniert das auch. doch wenn ich jetzt zb den hexwert von 1543535498 (CRC32 von "1") haben will, kommt im simulator
Zitatrun68k.c, Line:2202, Invalid read from 076748B8
... woher kommt das? was ist der fehler? und wie kann ich ihn beheben?