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

 C Discussion :

Convertir un mot de 2 octets en décimal


Sujet :

C

  1. #1
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut Convertir un mot de 2 octets en décimal
    Bonjour a toutes et tous,

    J'ai un petit problème et je suis sûr que je vais trouver de l'aide ici. Dans le cadre d'un projet, j’envoie une trame MODBUS/JBUS pour demander la lecture de 9 mots de 2 octets. Je recupère la réponse dans un tableau de unsigned char. Ma question est au niveau de la conversion vers du décimal, je m'explique:

    par exemple j'ai un mot de deux octets (écrit en décimal) qui fait 0 239, bon la c'est fait la valeur en décimal c'est 239 mais si j'ai un mot qui faut 188 25, comment avoir son équivalent en décimal ??? (188 25 donne BC25 en héxadécimal et donc 48153 en décimal)

    Dans l'attente de vos réponses,
    Cordialement,
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiante
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiante

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 52
    Points
    52
    Par défaut
    j'ai rien compris à : (188 25 donne BC25 en héxadécimal et donc 48153 en décimal)

  3. #3
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut
    Citation Envoyé par diralark Voir le message
    j'ai rien compris à : (188 25 donne BC25 en héxadécimal et donc 48153 en décimal)
    un mot de deux octets, tu peux l'écrire soit en héxadécimal: FF FF, soit (et c'est mon cas) en décimal: 255 255.
    donc comment convertir mon mots de deux octets écrit en décimal en un chiffre décimal simple sans passé par la forme héxadécimal puis la conversion en chiffre décimal
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    bon dis moi si j'ai mal compris mais en gros t'as 2 octets genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    octet1 = 25;
    octet2 = 188;
    Et tu faudra savoir combien il ferait sur 2 octets , ben c'est simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    octet = octet1 + octet2*256; //octet1 = 25 , octet2 = 188 donc 25 + 188*256 = 48123
    // ça marche aussi avec 0 239 , ça aurait fait 239 + 0*256 = 239
    Bon il faut mieux faire un décalage de bit pour la rapidité mais c'est pour que tu comprenne le calcul de base.

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiante
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiante

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 52
    Points
    52
    Par défaut
    J'ai compris à la deuxième demande mais Kannagi a été le plus rapide. En effet le décalage d'un octets soit 8 bits qui existe entre ton 'octet de poids fort et celui de poids faible
    se traduit par un rapport de (2)^8 = 256

  6. #6
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut
    Et donc si je veux passé par le décalage d'octets, il faut que je fasse comment ???
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

  7. #7
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     uint8_t byte[18];
     uin16t_t word[9];
     
     for(int i = 0 ; i < 18 ; i+=2)
     {
         word[i>>1] = (byte[i]<<8) | byte[i+1];
     }
    Attention sur 16 bits tu ne peut représenter que des nombres compris entre 0 et 65535 ou -32768 et 32767, si tu considère que le mot est signé ou non.

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiante
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiante

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 52
    Points
    52
    Par défaut
    Déjà t'aurais pu remercier pour les réponses apportées je trouve

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Citation Envoyé par clairetj Voir le message
    Et donc si je veux passé par le décalage d'octets, il faut que je fasse comment ???
    On ne sait toujours pas ce que tu veux faire exactement au final. Décimal ou pas, tes données seront toujours stockées en binaire sur ta machine. Tu déclares vouloir utiliser un tableau de unsigned char. Est-ce que ce que tu cherches à faire, c'est fabriquer une chaîne de caractères ASCII pour afficher la valeur d'un entier seize bits en décimal aux yeux de l'utilisateur ou est-ce que tu veux faire autre chose ?

  10. #10
    Membre confirmé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Points : 604
    Points
    604
    Par défaut
    Merci pour les réponses, je me suis débrouillé avec la méthode de calcul que Kannagi a donné en exemple, et j'obtiens ce que je veux
    Si vous voulez suivre les différents championnats de football américain en France, en Europe et dans le Monde (en tout 32 pays différents), c'est sur www.fandefootus.fr

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

Discussions similaires

  1. Convertir un tableau de 8 octet en double IEEE 754
    Par dieuzorro dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/08/2008, 08h56
  2. Convertir variable Single en String avec deux décimales
    Par Pierre.g dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/08/2008, 13h18
  3. Convertir un string en equivalent octet
    Par SPACHFR dans le forum Débuter
    Réponses: 5
    Dernier message: 21/08/2007, 11h32
  4. Réponses: 12
    Dernier message: 05/06/2007, 10h24
  5. Convertir un mot en code ascii
    Par w0lf dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 10/01/2006, 14h17

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