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 : 53
    Points
    53

    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 : 7 608
    Points
    7 608

    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 : 53
    Points
    53

    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 181
    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 181
    Points : 4 307
    Points
    4 307

    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 12.04 64 bits (VM)

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

    Informations forums :
    Inscription : novembre 2004
    Messages : 619
    Points : 780
    Points
    780

    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 : 53
    Points
    53

    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
  •