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 :

Conversion d'un entier non signée en 0x(entier non signée)


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Conversion d'un entier non signée en 0x(entier non signée)
    Bonjour,

    je suis actuellement en train de créer un test unitaire en c++ sous l'expert console avec c++ builder. Mon problème étant de récupérer la valeur saisie par l'utilisateur sous la forme 0x(Valeur saisie)

    Exemple
    :

    Si l'utilisateur saisi 15 je dois récupérer 0x15
    Si l'utilisateur saisi 168 je dois récupérer 0x1 et 0x68

    je cherche depuis pas mal de temps mais sans résultat.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Attention, quand on écrit 0xune_valeur, on considère qu'il s'agit d'une valeur notée en hexadécimale.

    Et donc, 168 en hexadécimal n'est pas égal à 0x1 d'un coté et 0x68 de l'autre mais est égal à 0xA8

    Maintenant, il faut savoir que la représentation de valeurs n'est qu'une convention: à la base, dans un ordinateur, tu n'a que des 1 et des 0 (il travaille en binaire), et donc, on se rend compte que
    10101000 en binaire équivaut à 168 en notation décimale ou à 0xA8 en notation hexadécimale

    La plus grosse "difficulté" résidant dans le fait... qu'il faille récupérer la saisie de l'utilisateur sous le bon type, et, pour ce faire, si tu utilise cin, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cout<<"introduisez la valeur à tester";//l'affichage de ce que tu attend de l'utilisateur
    int recup;
    cin>>recup;
    suffira.

    Si ton code utilise un autre type pour le cin (par exemple, une chaine de caractères), il faudra peut etre passer par un stringstream pour assurer la conversion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cout<<"introduisez la valeur à tester";//l'affichage de ce que tu attend de l'utilisateur
    std::string recup; //aie, on récupère une chaine de caractères
    cin>>recup;
    /* conversion de la chaine de caractères en entier */
    int recup2;
    std::stringstream ss;
    ss<<recup;
    ss>>recup2;
    /* on teste récup2 ;)*/
    Ou peut être n'ai-je vraiment pas compris le but de la manoeuvre

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonsoir et merci pour ton intérêt. Je sais que 168 n'est pas égal à 0x01 + 0x68. Je t'explique plus en détail la manœuvre.

    Je reçoit via la liaison série RS232 une trame dont le format est le suivant :

    0xff 0xff 0x00 0x01 0x68 0xLRC
    avec les deux octets 0xff qui indiquent qu'il s'agit d'une nouvelle trame
    ensuite, 0x00 pour le type de la trame et 0x01 pour le digit 100 et 0x68 pour les digit 10 et 1.

    Exemple : Si la pluviométrie vaut 168mm/h 1 correspond au digit 100, 6 au digit 10 et 8 au digit 1.

    Maintenant, mon test unitaire doit permettre à l'utilisateur de saisir ses propre valeurs.

    J'ai cherché cette après midi et j'ai trouvé cela :
    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
     
    int main(int argc, char* argv[])
    {
    	unsigned short Pluviometrie = 0;
     
    	char Octet = 0;
    	char Octet1 = 0;
    	char Octet2 = 0;
     
    	scanf("%x",&Pluviometrie);
     
    	if(Pluviometrie > 99)
    	{
    	 Octet1 = Pluviometrie >> 8;
    	 Octet2 = Pluviometrie;
    	}
    	else
    	{
    	 Octet = Pluviometrie;
        }
     
    	return 0;
    }
    ça fonctionne pour les entiers mais après pour les nombre à virgule

    Car si l'utilisateur rentre 16,8 comme valeur ma trame doit avoir la forme suivante :
    0xff 0xff 0x00 0x16 0x08 0xLRC

    là j'aurai besoin de ton avis.

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Au vu de la premiere trame... je dirai que tu essayes de passer 1608 ....

    Comment tu passerais 1608 alors ?

Discussions similaires

  1. Tableau d'entier c++ en tableau d'entier VB.net
    Par arkerone dans le forum VB.NET
    Réponses: 0
    Dernier message: 25/11/2010, 22h49
  2. conversion d'une chaine de caractere en un entier
    Par la_reine dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/05/2008, 18h21
  3. Avoir un entier dans une plage d'entier
    Par DefmY dans le forum C
    Réponses: 1
    Dernier message: 13/05/2007, 16h24
  4. [Debutant]Recuperer des données signé et les renndre non signées
    Par parp1 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/02/2007, 14h01
  5. Réponses: 3
    Dernier message: 13/09/2006, 17h27

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