IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Calcul du CRC de C à Python [Python 2.X]


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2018
    Messages : 73
    Par défaut Calcul du CRC de C à Python
    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

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu ne dois pas déclarer de variables avant de les utiliser.
    La conversion en entier se fait simplment avec int()
    Il faut respecter les indentations de façon stricte, là normalement tu as une erreur au deuxième if

    Donc ça donne ceci:
    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
     
    CAR = int(CARB)
     
    for i in range(8):
        if CRCB & 0x8000 == 0x8000:  
            CRCB *= 2
            CAR *= 2
            if CAR & 0x100 != 0:
                CRCB += 1
                CRCB = CRCB ^ 0x1021
        else:
            CRCB *= 2
            CAR *= 2
            if CAR & 0x100 != 0:
                CRCB += 1

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2018
    Messages : 73
    Par défaut
    Merci infiniment, ça marche ! je l'ai mis en fonction et j'ai rajouter un bout de code pour envoyer des valeurs en hexa et je reçois le bon CRC

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

Discussions similaires

  1. recuperer (ou calculer le CRC d'un fichier)
    Par johannlb dans le forum VB.NET
    Réponses: 6
    Dernier message: 02/08/2007, 17h15
  2. Calcul de CRC
    Par boubajazz dans le forum Linux
    Réponses: 1
    Dernier message: 13/06/2007, 11h18
  3. calcul du CRC sur 2 octets
    Par jeannot27 dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/12/2005, 10h55
  4. [SRC] Calcul de CRC
    Par cfdev dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/03/2005, 13h08

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