Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre du Club
    Homme Profil pro
    informatique industrielle & domotique - Delphi
    Inscrit en
    janvier 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 94
    Points : 58
    Points
    58

    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);

  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 : 40
    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 202
    Points
    8 202

    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 :
    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
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 94
    Points : 58
    Points
    58

    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 Yves Lemaire
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    2 246
    Détails du profil
    Informations personnelles :
    Nom : Homme Yves Lemaire
    Âge : 51
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : mars 2005
    Messages : 2 246
    Points : 5 073
    Points
    5 073

    Par défaut

    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 4.41 sous Win 7 64 bits - Code Typhon 4.50 sous Ubuntu 14.04 64 bits et 12.04 64 bits (VM)

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

    Informations forums :
    Inscription : novembre 2004
    Messages : 630
    Points : 884
    Points
    884

    Par défaut

    ce serait pas plutot :
    Code :
    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
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : janvier 2006
    Messages : 94
    Points : 58
    Points
    58

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •