p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre du Club
    Homme Profil pro
    informatique industrielle & domotique - Delphi
    Inscrit en
    janvier 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 123
    Points : 66
    Points
    66

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2005
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 195
    Points : 8 210
    Points
    8 210

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre du Club
    Homme Profil pro
    informatique industrielle & domotique - Delphi
    Inscrit en
    janvier 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 123
    Points : 66
    Points
    66

    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

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : mars 2005
    Messages : 2 465
    Points : 5 957
    Points
    5 957

    Par défaut

    Hello, je dirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function proccrc8(u8CRC, u8Data: Byte): Byte; inline;
    begin
      Result := u8CRC8Table[u8CRC xor u8Data];
    end;
    Delphi 5 Pro - CodeTyphon 5.20 sous Win 7 et Ubuntu 14.04

  5. #5
    Membre émérite Avatar de guillemouze
    Profil pro
    Inscrit en
    novembre 2004
    Messages
    648
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : novembre 2004
    Messages : 648
    Points : 925
    Points
    925

    Par défaut

    ce serait pas plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function proccrc8(u8CRC, u8Data: Byte): Byte; inline;
    begin
      Result := u8CRC8Table[IntPower(u8CRC, u8Data)];
    end;
    ?

  6. #6
    Membre du Club
    Homme Profil pro
    informatique industrielle & domotique - Delphi
    Inscrit en
    janvier 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 123
    Points : 66
    Points
    66

    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Comment traduire ce code C en Pascal ?
    Par [ZiP] dans le forum Lazarus
    Réponses: 2
    Dernier message: 22/02/2013, 10h24
  2. transposer du code Linux <--> Windows
    Par ylyco dans le forum wxWidgets
    Réponses: 3
    Dernier message: 07/08/2011, 21h59
  3. Création de Tableau et son code en Turbo Pascal
    Par Garl17 dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/04/2011, 08h07
  4. [debutant] comment transposer mon code vba excel en access
    Par eclipse012 dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/02/2008, 08h23
  5. Réponses: 1
    Dernier message: 21/11/2007, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo