okCitation:
Envoy� par farscape
et je lance bien la lecture des .dll et du .exe (pas les fichiers de code) ?
Version imprimable
okCitation:
Envoy� par farscape
et je lance bien la lecture des .dll et du .exe (pas les fichiers de code) ?
et... je ne vois pas dans ton code o� tu indiques quel fichier lire...
salut,avec ca devrait etre bon (j'ai pas teste)
8OCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 char *aszFileName[]={"nom1.exe","nom2.exe"}; unsigned long original_crc=CRC_MASK; FILE* stream; int i=0; // utilisation BuildCRCTable();// initialisation for(int i=0;i<sizeof(aszFileName)/sizeof(char *);i++) { stream = fopen(aszFileName[i],"rb"); fseek( stream, 0L, SEEK_SET); while(!feof( stream )) { original_crc=UpdateCharacterCRC32(original_crc,fgetc( stream )); } fclose(stream); } original_crc^=CRC_MASK;
salut,
projet simple complet dispo sous :
http://farscape-dev.chez.tiscali.fr/download.htm
prendre CRC32.
8O
okCitation:
Envoy� par farscape
c'est gentil mais le zip est corrompu quand je le download.
J'ai int�gr� ton code. Ca marche bien sauf que je pensais qu'un CRC32 �tait de la forme A4B2 par exemple (8x4 = 32). L�, j'ai un CRC du genre 51BBE4B4... dois-je modifier le MASK ?
mince pour le zip c'est mon prog ftp qui a foir� ca sera repar� ce soir.
par contre la je comprends pas le sens de ta question .Citation:
Ca marche bien sauf que je pensais qu'un CRC32 �tait de la forme A4B2 par exemple (8x4 = 32). L�, j'ai un CRC du genre 51BBE4B4... dois-je modifier le MASK ?
le crc resultant peut etre afficher sous forme de chaine hexadecimale:
en utilisant %X ou � un format fixe %10X
dans tous les cas c'est le resultat du calcul du polynome .changer la valeur du mask me semble hasardeux sauf � en maitriser le calcul ce qui n'est pas mon cas!
8O
oui ben je l'affiche avec %.4X mais il est trop grand et s'affiche sur 8 caract�res hexa : 51BBE4B4Citation:
Envoy� par farscape
euh... scuse, l� c'est moi qui d�conne...
en fait, j'avais besoin d'un CRC 16 bits :roll:
FF 8 bits char
FFFF 16 bits short integer (en mode 32bits)
FFFF-FFFF 32 bits.... long ou un int
maintenant si tu veux un crc 16 bits je peux trouver �a mais il faut savoir que la precision est moins bonne.
8O
oui je veux bien un algo sur 16 :)Citation:
Envoy� par farscape
(m'en fiche de la pr�cision)
mon message est arriv� apres le tiens !
:D
je regarde pour le 16bits reponse dans pas longtemps.
:D
voila !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 unsigned short int Ccitt16Table[ 256 ]; void BuildTable16( ) { int i; int j; int k; int crc; for ( i = 0 ; i < 256 ; i++ ) { k = i << 8; crc = 0; for ( j = 0 ; j < 8 ; j++ ) { if ( ( crc ^ k ) & 0x8000 ) crc = ( crc << 1 ) ^ 0x1021; else crc <<= 1; k <<= 1; } Ccitt16Table[ i ] = crc; } } #define CalculateCharacterCRC16(crc,c) (unsigned short int) ( ( crc << 8 ) ^ Ccitt16Table[ (crc >> 8 ) ^ c ] )
:D
j'ai modifi� :
#define CRC_MASK 0xFFFFFFFFL
par :
#define CRC_MASK 0xFFFFL
r�sultat : nickel !
et je dirais :
merci tu m'as sauv� la vie ! (comme toujours) ;)
valeur initial du Mask 0.
:DCode:
1
2
3 crc=0; crc=CalculateCharacterCRC16(crc,c)
ok merci ! :lol:
original_crc^=CRC_MASK;
se transforme aussi en original_crc^=0; ??? t'es s�r ?
apparement il y pas besoin de le faire � la fin.
8O
autre chose :
je compile, j'execute : crc = AC9A
je r�-execute : crc = AC9A
je recompile (sans changer le code d'un pouce), j'execute : crc = 0EFF.
normalement, si je recompile sans changer le code, j'ai le m�me CRC non ?
effectivement ,
moi je ferais le test suivant:
je compile j'execute je regarde le crc ,je mets le prg de cote
je recompile j'execute je regarde le crc si <> je reteste avec le prog mis de cote .
si le resultat est le m�me �a veut dire que le compilo ne produit toujours la m�me chose sinon bug
tient moi au courant .
:D
le plus simple est que je te file mon code :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 unsigned short int Ccitt16Table[ 256 ]; void BuildTable16( ) { int i; int j; int k; int crc; for ( i = 0 ; i < 256 ; i++ ) { k = i << 8; crc = 0; for ( j = 0 ; j < 8 ; j++ ) { if ( ( crc ^ k ) & 0x8000 ) crc = ( crc << 1 ) ^ 0x1021; else crc <<= 1; k <<= 1; } Ccitt16Table[ i ] = crc; } } #define CalculateCharacterCRC16(crc,c) (unsigned short int) ( ( crc << 8 ) ^ Ccitt16Table[ (crc >> 8 ) ^ c ] ) // utilisation unsigned long CalculeCRC(){ char system_path[1000]; GetWindowsDirectory(system_path, 1000); char DllPlop[1000]; sprintf(DllPlop, "%s\\DllPlop.dll",system_path); char Classe[1000]; sprintf(Classe, "%s\\Classe.dll",system_path); char *aszFileName[]={DllPlop,Classe, "MON_APPLI.exe"}; unsigned long original_crc=0; FILE* stream; int k=0; BuildTable16();// initialisation for(k=0;k<sizeof(aszFileName)/sizeof(char *);k++) { stream = fopen(aszFileName[k],"rb"); fseek( stream, 0L, SEEK_SET); while(!feof( stream )) { original_crc=CalculateCharacterCRC16(original_crc,fgetc( stream )); } fclose(stream); } //original_crc^=CRC_MASK; return original_crc; }