Bonjour,

On m'a demandé de faire une fonction pour calculer un CRC en python,pour l'envoi et réception de trame en hexadécimal, afin de confirmer que les trames envoyées sont bien les bonnes, pour ce faire, on m'a donner l’organigramme de celui-ci, et aussi en se basant sur un code déjà écrit en C, cependant, je suis vraiment très novice en python, j'ai essayer de faire le code mais, les multiples erreurs me découragent, voici le code en C pour avoir plus d'idées:

Code : 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
unsigned int16 CONTROL(unsigned char CARB, unsigned int16 CARCB)
{
    int8 jb;
    CAR = (int16)(CARB);
    for(jb=0; jb<8; jb++)
    {
        if ((CRCB & 0x8000) ==0x8000)
        { 
            CRCB = CRCB *2;
            CAR = CAR*2;
            if ((CAR & 0x100) != 0):
            {
                    CRCB ++;
                    CRCB = CRCB ^ 0x1021
            }
        }
        else
        {
            CRCB = CRCB*2;
            CAR = CAR *2;
            if ((CAR & 0x100) != 0):
            {
                    CRCB ++;
            }
        }  
    } 
    return CRCB;
}

J'ai essayé de l'ecrire en python mais j'ai commencer à avoir des erreurs au début, en essayant de déclarer int8

voici mon code très mal écrit pour vous éviter de tout saisir:

Code : 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
import numpy as np
 
i=int8 (i)
CAR = (int16)(CARB)
 
for i in range (0,8):
    if (CRCB & 0x8000) ==0x8000:  
       CRCB = CRCB *2;
       CAR = CAR*2;
        if (CAR & 0x100) != 0:
                CRCB += 1
                CRCB = CRCB ^ 0x1021
    else:
         CRCB = CRCB *2;
         CAR = CAR*2;
         if (CAR & 0x100) != 0:
                CRCB += 1
Des indications svp, je vous remercie