Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Langage
Langage Tout ce qui concerne le langage (POO, syntaxe, message d'erreur...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/12/2012, 10h19   #1
aladin95
Membre du Club
 
Homme
informatique industrielle & domotique - Delphi
Inscription : janvier 2006
Messages : 70
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : informatique industrielle & domotique - Delphi

Informations forums :
Inscription : janvier 2006
Messages : 70
Points : 50
Points : 50
Par défaut Routine à transposer de code C en Pascal

Bonjour
j'ai un probleme pour transposer cette routine en code C vers delphi
Il s'agit d'un calcul de Crc 8 bits
Est-ce que quelqu'un pourrait m'aider
D'avance merci


Code c :
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
The polynomial G(x) = x8 + x2 + x1 + x0 is used to generate the CRC8 table, needed
for the CRC8 calculation. Following C code illustrates how the CRC8 value is calculated:
Implementation:
uint8 u8CRC8Table[256] = {
0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15,
0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5,
0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85,
0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2,
0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32,
0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c,
0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec,
0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c,
0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b,
0x76, 0x71, 0x78, 0x7f, 0x6A, 0x6d, 0x64, 0x63,
0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb,
0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8D, 0x84, 0x83,
0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb,
0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
};
#define proccrc8(u8CRC, u8Data) (u8CRC8Table[u8CRC ^ u8Data])
Example:
u8CRC = 0;
for (i = 0 ; i < u16DataSize ; i++)
u8CRC = proccrc8(u8CRC, u8Data[i]);
printf("CRC8 = %02X\n", u8CRC);
aladin95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 09h40   #2
Rayek
Modérateur
 
Avatar de Rayek
 
Homme
Développeur informatique
Inscription : mars 2005
Messages : 5 015
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2005
Messages : 5 015
Points : 7 781
Points : 7 781
Si le CRC 8bits n'est pas obligatoire il existe dans les unité d'indy des fonctions qui permettent de faire le calculs

Unités : IdHashCrc

Exemple d'utilisation

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
function DoCalcCRC32 (AFileName : String) : cardinal;
var
  IndyStream : TFileStream;
  Hash32 : TIdHashCRC32;
begin
  IndyStream := TIdFileStream.Create(AFileName,fmOpenRead);
  Hash32 := TIdHashCRC32.Create;
  Result := Hash32.HashValue(IndyStream);
  Hash32.Free;
  IndyStream.Free;
end;
__________________
Modérateur Delphi Combattez la brute
Aucune réponse aux sollicitations techniques par MP

Le guide du bon forumeur :__________
[Projet en cours] Des unités pour faciliter l'utilisation d'indy : EasyIndy 1.3
Rayek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 10h03   #3
aladin95
Membre du Club
 
Homme
informatique industrielle & domotique - Delphi
Inscription : janvier 2006
Messages : 70
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : informatique industrielle & domotique - Delphi

Informations forums :
Inscription : janvier 2006
Messages : 70
Points : 50
Points : 50
Par défaut Merci

Si, ce calcul est imposé par l’équipement avec lequel je veux me connecter.

Quelqu'un m'a proposé une solution que je vais tester.
donc je n'annule pas encore cette discussion.

Merci toutefois pour ta réponse.

Cordialement
aladin95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 10h47   #4
tourlourou
Modérateur
 
Avatar de tourlourou
 
Homme Yves Lemaire
Biologiste ; Progr(amateur)
Inscription : mars 2005
Messages : 1 721
Détails du profil
Informations personnelles :
Nom : Homme Yves Lemaire
Âge : 50
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Biologiste ; Progr(amateur)

Informations forums :
Inscription : mars 2005
Messages : 1 721
Points : 3 326
Points : 3 326
Hello, je dirais :
Code :
1
2
3
4
function proccrc8(u8CRC, u8Data: Byte): Byte; inline;
begin
  Result := u8CRC8Table[u8CRC xor u8Data];
end;
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits
tourlourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 11h40   #5
guillemouze
Membre chevronné
 
Avatar de guillemouze
 
Inscription : novembre 2004
Messages : 540
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : novembre 2004
Messages : 540
Points : 712
Points : 712
ce serait pas plutot :
Code :
1
2
3
4
function proccrc8(u8CRC, u8Data: Byte): Byte; inline;
begin
  Result := u8CRC8Table[IntPower(u8CRC, u8Data)];
end;
?
guillemouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2012, 14h00   #6
aladin95
Membre du Club
 
Homme
informatique industrielle & domotique - Delphi
Inscription : janvier 2006
Messages : 70
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : informatique industrielle & domotique - Delphi

Informations forums :
Inscription : janvier 2006
Messages : 70
Points : 50
Points : 50
Par défaut Ca marche avec xor

Il s'agit bien d'un XOR et non d'un IntPower

C'est vérifié.. ça marche

Merci les amis
aladin95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h02.


 
 
 
 
Partenaires

Hébergement Web