CRC32 API, ALGORITHME DE SOMME DE CONTROL

Utilisateur anonyme - 30 nov. 2006 à 13:09
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008 - 29 févr. 2008 à 16:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40499-crc32-api-algorithme-de-somme-de-control

N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
29 févr. 2008 à 16:29
bonjour ,enfaite je voudrais utilise la fonction CRC32FromFile
comme ceci CRC32FromFile(application.ExeName)
est ce possible ?
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
4 déc. 2006 à 23:47
Pourquoi limiter alors l'utilisation du callback aux gros fichiers ?

j'ai fais la maj ce matin alors que j'etais encore dans le brouillard du dodo :)

attention, la position varie de 2048 en 2048 donc toujours multiple de 2 et donc ...

pour l'exception je prend note, c'est vrai que je ne pense pas a reutiliser ma source TErrorManager, car je souhaite toujours faire des sources independante les une des autres.

et en effet tu as raison le retour $FFFFFFFF et non # (c'est pas du html) est une erreur si le fichier n'existe pas.
un simple Warning sur file not found serait suffisant.

je fais la maj dans pas longtemps.
Merci f0xi !
Au passage, notez bien la nouvelle version de l'afficheur de sources intégré au site: ça en vaut la peine ! Avec colo syntaxique et tout (même s'il reste qeuelques bugs), moi je dis bravo Nix.

Dernières suggestions (promis j'arrète après ^^):
- Pourquoi limiter alors l'utilisation du callback aux gros fichiers ?
- Si tu le laisse, autant faire if SFrm and (Stream.Position mod 3 = 0) then Callback... (ça évite la variable SZ à décrémenter (surtout que ce que tu fais avec est largement faisable sans) et tu gagnes quelques cycles - encore plus si tu mets 5 au lieu de 3)
- Si le fichier n'existe pas, il faudrait mieux :
* Soit déclencher sa propre exception (genre ECRC32Exception)
* Laisser Delphi le faire lorsque tu crée le stream.

Si tu ne fais que renvoyer #FFFFFFFF, ça manque d'intérêt
Et puis, ça te fait travailler les méninges, vérifer à deux fois le code qui tuilise la fonction (notament avec des try...except) et fonctionner ton TErrorManager !!

A+
Tout à fait f0xi.
Je te laisse l'honneur de faire cette mise à jour. Après tout, c'est ta source !

Un bémol cependant: très bien d'avoir mis "nil" comme paramètre par défaut, mais alors tu ne peux pas mettre "var" en même temps. Et de toute façon, c'est pas logique de mettre une procédure callback en "var".

PS: N'oublies pas le test if Assigned(ProgressCallBack) then ProcessCallBack(Stream.Position, Stream.Size) !!!
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
4 déc. 2006 à 01:47
Salut Flo!

bonne idée le callback, au depart c'est ce que je voulais faire ...
alors je te laisse le choix, soit tu prend ma source et tu l'implemente, soit tu decide de m'en laisser le soin.

il est vrai que c'est mieux de laisser le choix a l'utilisateur.

ce qui pourrais donc donner :

type
TCRCProgressCallBack = procedure(const Position, Size : int64);


function CRC32FromFile(Const FileName : String; var ProgressCallBack : TCRCProgressCallBack = nil) : cardinal;
Salut f0xi,

Et ben good job ! J'ai vu aussi MD5 et c'est vraiment praique l'implémentation que du donnes.
Par contre, là où mes yeux piquent, c'est pour la fiche de progression (pour les fichiers).

Pourquoi se figer à une implémentation fixe alors qu'une bonne petite procédure callback laisserait au programmeur (en l'occurence, nous ^^) choisir SA méthode de progression, et ceci, sans avoir à trifouiller ton unité. On pourrait avoir deux appli qui s'en servent mais qui n'affichent pas la progression de la même manière.

Tiens, t'a de la chance en plus, je suis en plein dans les callbakcs en ce moment...
Utilisateur anonyme
30 nov. 2006 à 23:32
J'ai hâte de voir le code du SHA1 ...

et merci pour toutes ces précisions
Bonne prog et ..
@+
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 nov. 2006 à 20:13
sinon je planche deja sur SHA ...
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
30 nov. 2006 à 20:11
Les valeurs du tableau CRC32Table sont des resultats pre-calculées sont definies dans le journal systeme Microsoft de mars 1995.

ces données, sont obtenues grace a un calcul basé sur un polymone (crc32-ccitt)..
qu'on peut traduire en delphi par ceci :

procedure PCRC(const Polynome : integer; const T : array of integer);
var
i, j, R:integer;
begin
for i := 0 to 255 do begin
R := i;
for j := 0 to 7 do begin
if (R and 1)<>0 then
R := (R shr 1) xor Polynome
else
R := R shr 1;
end;
T[i] := R;
end;
end;

pas bien compliqué a comprendre donc.
pour plus de details : http://en.wikipedia.org/wiki/Cyclic_redundancy_check
Utilisateur anonyme
30 nov. 2006 à 13:09
Salut,

que dire si ce n'est bravo ...
après le MD5 voici le CRC32

à quand le SHA1 ? lol

Même si le code me dépasse un peut
j'ai toute fois une où deux questions :
d'ou proviennent les valeurs qui sont dans ( CRC32Table ) ?
et à quoi correspondent elles ?

10/10
@+
Cirec