Traduire un algo en C++ vers Delphi

Signaler
Messages postés
1
Date d'inscription
mardi 25 mai 2021
Statut
Membre
Dernière intervention
25 mai 2021
-
Messages postés
15995
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2021
-
bonjour chers amis ,
j' ai besoin d intégré dans mon projet delphi un algorithme de calcul CRC pour vérifier la totalité d une chaine de donnée Hex, je suis obligé d utiliser un algo type CRC16_mcrf4xx

malheureusement je n ai pas trouvé des articles qui explique clairement cet algo, par contre , j ai trouvé une implémentation en C, j espère trouvé ici une âme charitable qui pourrait m aider a traduire ce code :

https://gist.github.com/aurelj/270bb8af82f65fa645c1

#include <stdint.h>
#include <stddef.h>

uint16_t crc16_mcrf4xx(uint16_t crc, uint8_t *data, size_t len)
{
    if (!data || len < 0)
        return crc;

    while (len--) {
        crc ^= *data++;
        for (int i=0; i<8; i++) {
            if (crc & 1)  crc = (crc >> 1) ^ 0x8408;
            else          crc = (crc >> 1);
        }
    }
    return crc;
}

1 réponse

Messages postés
15995
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2021
548
Bonjour

Tout d'abord, pense à remercier Karamel, qui a rendu ton code lisible.
Pour tes prochains posts, merci de lire et d'appliquer ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Je ne code pas du tout en Delphi et très très peu (et très très mal) en C, mais je peux te donner des pistes pour essayer de comprendre ce code.

Lire la doc sur les différents types de variables utilisées.
A noter qu'il y a des variables en 8bits et en 16 bits, je ne sais pas comment Delphi gère ça aujourd'hui dans des environnement 64bits.

Te renseigner sur la correspondance des opérateurs, par exemple == correspond à =, alors = correspond à :=

Te renseigner sur les opérateurs qui combinent une opération et une affectation par exemple
a += b
veut dire qu'on additionne les valeurs de a et de b et qu'on affecte le résultat à a.
a++
veut dire qu'on ajoute 1 à a et qu'on affecte le résultat à a.

Te renseigner sur les pointeurs,
*data
en est un.

Te renseigner sur l'algèbre de bool, car il y a des ou binaires, des et binaires et des décalages de bits.
Et ça ne coule pas de source, en bool, l'opérateur ou s'écrit + et "2 + 3" ça fait "3" parce que *2 c'est 10,
  • 3 c'est 11
  • bit à bit 0 ou 1 ça fait 1 et 1 ou 1 ça fait 1 aussi, donc 11 c'est 3.

En C l'opérateur ou s'écrit ^