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 decimal en hexa


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Par défaut convertir decimal en hexa
    Bonjour à tous,
    je bute sur un problème:

    Dans un Form, j'ai une ScrollBar qui me génère des nombres de 1 à 240.
    Comment faire pour transformer ces nombres en hexa et récupérer le résultat dans une variable?

    Le but est d'envoyer des octets sur le port série, afin de piloter une PWM d'arduino.

    J'ai essayé un tas de trucs depuis hier, je n'y arrive pas (précision: je débute en C++).

    D'avance merci!!!!!

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Je ne comprends pas la question
    En C/ C++ pour représenter un entier, on a les types suivants: char, unsigned char, short, unsigned short, int, unsigned int, long et éventuellement long long.
    La seule différence c'est leur longueur en octets qui varie ... et qui varie en fonction de la plateforme.
    Seul le char est fixe : 1 octet

    Maintenant, étant donné que tu ne veux pas convertir ton nombre en "chaîne de caractères", tu t'en fiches qu'il soit en décimal, héxa ou octal

    Par contre pour l'envoi octet par octet il faut utiliser les opérateurs logiques & | et les décalages << >>
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int number = XXX;
    unsigned char byte_1 = (number & 0xff);
    unsigned char byte_2 = ((number >>  8) & 0xff);
    unsigned char byte_3 = ((number >> 16) & 0xff);
    unsigned char byte_4 = ((number >> 24) & 0xff);
    Ensuite certains membres ici te recommanderaient d'utiliser les types uintN_t dans l'entête stdint.h

    Moi je préfère travailler qu'avec des tableaux de unsigned char (même si c'est un peu lourd).
    Par exemple: un int devient unsigned char[4].

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Par défaut
    Je me suis mal exprimé...
    Voilà ce qui me pose problème:
    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
     
    private: System::Void hScrollBar1_Scroll(System::Object^  sender, System::Windows::Forms::ScrollEventArgs^  e) {
    			 this->textBox1->Text = String::Concat( "", (hScrollBar1->Value)*2 , " V" );
     
    			 //pwm1 = (hScrollBar1->Value);
    			 //unsigned char pwm1 = (hScrollBar1->Value & 0xff);
    			 //pwm1 ={0xFE,pwm1};
     
    			this->textBox6->Text = String::Concat( "", pwm1 , "" );
     
    			// fin modif
     
     
    			 //array<unsigned char>^pwm1 ={0xFE,0xF9};
     
     
    			  //serialPort1->Write (pwm1,0,1);
     
    		 }
    j'ai dans hScrollBar1 des valeurs de 1à 240.
    Je ne peux pas écrire 100 sur le port série. Quand bien même je pourrais, je ne peux m'en servir après (les sorties PWM de l'arduino ne comprennent que l'hexa).
    Je souhaiterais donc envoyer un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    array<unsigned char>^pwm1 ={0xFE,hScrollBar1->Value};
    				 serialPort1->Write(canstart,0,2);
    0xFE est la balise de début d'émission, et hScrollBar1->Value la valeur à envoyer. sauf que hScrollBar1->Value n'est pas en hexa. Par exemple, au leu d'envoyer 10, je voudrais envoyer 0A.

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array<unsigned char>^canstart ={0xFF,(0x54)};
    				 serialPort1->Write(canstart,0,2);
    ça marche. J'ai bien ma balise de début et mon octet en hexa.

    Reste plus qu'à trouver comment remplacer le 0x54 par ce qui sort de ma sCrollBar1.... Et là, je sèche...

    Bonne journée à tous.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Par défaut
    ""Maintenant, étant donné que tu ne veux pas convertir ton nombre en "chaîne de caractères"

    je me demande justement si ce n'est pas la solution...
    Donc question supplémentaire, comment faire pour passer, par ex, de 10(valeur sortie de hScrollBar) à 0A (valeur que je souhaiterais écrire sur le port série)?

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Sur le port série, veux-tu écrire un entier de valeur 0x0A ou la chaine "0A"?

    10 est 0x0A, mais, par défaut, sera écrit "10" dans les flux de sortie non manipulés

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 65
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Par défaut
    je souhaite écrire 0x0A.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/05/2015, 10h22
  2. Probléme pour convertir decimal en hexa
    Par vtk37 dans le forum Débuter
    Réponses: 7
    Dernier message: 19/05/2009, 14h00
  3. Convertir DECIMAL ou HEXA en ASCII
    Par lefebvre.pie dans le forum C++Builder
    Réponses: 13
    Dernier message: 22/02/2007, 16h03
  4. [C#] convertir un nombre hexa en int
    Par linux dans le forum C#
    Réponses: 5
    Dernier message: 08/12/2005, 16h38
  5. [langage] conversion décimal vers hexa
    Par chipster dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2004, 16h05

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