merci
Version imprimable
merci
Bon on suppose que tout ça est dans une string st par exemple.
Extraction du block
tout ça à mettre dans une boucle 'tant que iPos >0'...Code:
1
2
3
4
5
6
7
8 iPos := pos('88AA',st); if iPos >0 then //en fait on devrait avoir >4... begin sBlock:= copy(st,1,iPos); //on extrait le block dans sBlock //là tu fais ton traitement sur sBlock. st := copy(st,iPos+4,length(st)); // on enlève le block end;
Pour le traitement du block je passe la main...
Mais testes déja ça pour regarder si ça extrait les blocks.
Et où as-tu appris le français ?
Dans ton message, je n'ai personnellement pas compris ta demande ...
Et qu'appelles-tu un "boot" ?
Quel est l'entrée, la sortie, ...
ton fichier est-il long ? le Copy risque d'être lent à un grand nombre d'occurence, as-tu d'ailleurs des contraintes de temps ...
merci , j'ai besoin de votre aide specialement , et aussi ta ka garder tes critere pour toi meme ..Citation:
Envoyé par ShaiLeTroll
C'est dommage, de ne pas savoir reconnaîtres ses tords, surtout que la manipulation de binaire, c'est l'une de mes spécialités, c'est très bête de ne pas répondre à mes questions qui ont pour but de faire avancer ton problème, d'ailleurs tu ne le mérites absoluement pas !
Ton message ne contient pas les informations suffisantes pour y apporter une solution convenable, philnext essaye d'y répondre, il fournit d'ailleurs une méthode pour découper les blocks, mais je n'ai pas eu l'impression que ton problème concernait le découpage, mais plus un calcul de ckecsum non ?
PS : Mes Critiques sont en fonction des mes critères de respect et d'exigeance, et tu n'arrives pas à écrire une seule phrase sans faute et avec le bon vocabulaire :kill:
Salu ,
mon problem qui ce pose dans cette example est de calculer la chaine de caracter pour calculer le checksum .
dans le boot on trouve ceci :
AE0A12C54A2E1D0E88AA4EF01C3BA200C0BF2E10D1E00F10D20C220A00E20E58F88AAEEAA001E00F210F10FD..........
ce qui est en bleu c'est le Checksum et ce qui est en Rouge ces le separateur e block
dans ce boot pour calculer le checksum pour calculer les caractere qui sont avant le checksum .
Calculer [AE0A12C54] pour avoire le checksum [A2E1D0E]
voila comment sa ce passe dans cette example dans tout ce fichier
aussi une autre information le fihier ontient 2MO de taille , et aussi faut calculer tout ce fichier meme procedure avec ce dernier .
pour le cheksum voila la source :
j'attend votre aide !!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 unit Checksum; interface procedure CalcChecksum(p: pointer; n: integer; var RC8: word); implementation procedure CalcChecksum(p: pointer; n: integer; var RC8: word); const ChecksumTable: array[0..255] of word = ( $0000, $c0c1, $c181, $0140, $c301, $03c0, $0280, $c241, $c601, $06c0, $0780, $c741, $0500, $c5c1, $c481, $0440, $cc01, $0cc0, $0d80, $cd41, $0f00, $cfc1, $ce81, $0e40, $0a00, $cac1, $cb81, $0b40, $c901, $09c0, $0880, $c841, $d801, $18c0, $1980, $d941, $1b00, $dbc1, $da81, $1a40, $1e00, $dec1, $df81, $1f40, $dd01, $1dc0, $1c80, $dc41, $1400, $d4c1, $d581, $1540, $d701, $17c0, $1680, $d641, $d201, $12c0, $1380, $d341, $1100, $d1c1, $d081, $1040, $f001, $30c0, $3180, $f141, $3300, $f3c1, $f281, $3240, $3600, $f6c1, $f781, $3740, $f501, $35c0, $3480, $f441, $3c00, $fcc1, $fd81, $3d40, $ff01, $3fc0, $3e80, $fe41, $fa01, $3ac0, $3b80, $fb41, $3900, $f9c1, $f881, $3840 ); type buffer = array[0..0] of byte; var i: integer; q: ^buffer; begin q := p; for i := 0 to n-1 do RC8 := hi(RC8) xor ChecksumTable[ q^[i] xor lo(RC8) ]; end; end.
Merci, pour les précisions !
Maintenant que l'on a une légère idée du contexte, quel est ton besoin ?
car on ne sait pas si ton fichier c'est l'entrée ou la sortie de la fonction que tu veux réaliser ...
as-tu un tableau de Tableau de Byte contenant
($AE, $0A, $12, $C5), ($4E, $F0, $1C, $3B, $A2, $00, $C0, $BF, $2E, $10, $D1, $E0, $0F, $10, $D2, $0C, $22, $0A, $00), (...
et tu dois en sortie créer un fichier contenant
bon, c'est ce que j'ai compris, et je vais tenter d'y répondre, surtout que cela semble cohérent avec ta fonctionCode:AE0A12C54A2E1D0E88AA4EF01C3BA200C0BF2E10D1E00F10D20C220A00E20E58F88AAEEAA001E00F210F10FD..........
Maintenant si AE0A12C5 donne 4A2E1D0E, on a un problème la fonction CheckSum fourni ne contient pas dans sa table de HASH ni 4A2E, ni 1D0E, c'est la un problème, car la fonction renvoie un Word donc au mieux 0000 à FFFF, et non pas 00000000 à FFFFFFFF ... aurais tu un autre exemple, celui-là semble incohérent
Resalut ,
a propos de l'example que je tes donnée , ces un example bidon pour te faire expliké la methode de calculer un checksum , ce que je veu moi etre present dans mon application .il traite le checksum par example
il prend cette chaine AE0D11E20588EE89654F201C il calcule en checksum il trouve ceci A2EA4CCEapres ya le reper de block88AA et ainsi suite pour tout le fichier binaire , pour le code du checksum ya pas de problem je peu m'occuper de sa .ce qui me reste de detecter le reper des block qui 88AA Et de prendre la chaine de caractere et le calculer en checksum .
voila comment ce presente le fichier binaire
AE0D11E20588EE89654F201CA2EA4CCEB88AA[/B].....et ainsi suite .
Ta fonction renvoit un Checksum sur 2 Bytes, donc tu n'en auras jamais 4, ensuite, tu as chaines ? ou des tableau de bytes ? car il faut convertir ta chaine FF FF en tableau de byte alors, comment obtient tu les données ...
si tu veux que l'on t'aide pour faire du code il faut connaitre le code autour ...
Sur ce, bon week end ...
je te laissé un MP .merci