Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupération de valeurs dans chaîne de caractères

    12 juin 2018 à 13:18:00

    Bonjour,

    J'aimerai en c++ récupérer et stocker une valeur hexadécimal dans une chaîne de caractère

    Exemple :

    j'ai une variable de type char lecture[]="A610" , et je voudrai récupérer les valeurs sous la forme char  adresse[0]=0xA6 et adresse[1]=0x10 

    Si des informations supplémentaires sont nécessaires, je répondrai dans les plus bref délais.

    -
    Edité par clemper 12 juin 2018 à 16:26:00

    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2018 à 14:52:45

      Mauvais fofo.

      Sur cette discussion, regarde mon dernier message ca peut t'aider.

      • Partager sur Facebook
      • Partager sur Twitter
        12 juin 2018 à 15:19:08

        Bonjour

        sscanf(lecture, "%2x%2x", &adresse[0], &adresse[1]) si j'ai bien compris les parties concernées du manuel de sscanf.

        -
        Edité par Marc Mongenet 12 juin 2018 à 15:19:33

        • Partager sur Facebook
        • Partager sur Twitter
          12 juin 2018 à 16:04:24

          Bonjour,

          Mauvais forum

          Le sujet est déplacé dans le forum approprié : Langage C++

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            12 juin 2018 à 16:12:27

            Merci pour vos réponse et j'ai grâce à vous trouvé la solution :

                char lecture[]="10604F38CDA5";
                char adresse[6];
                
                sscanf(lecture, "%2x%2x%2x%2x%2x%2x", &adresse[0], &adresse[1],&adresse[2],
                       &adresse[3],&adresse[4],&adresse[5]) ;
            
                for(int i=0;i<6;i++)
                {
                    printf("%2X ", (unsigned char)adresse[i]);
                }

            ce qui me donne le résultat suivant :

            resultat adresse

            -
            Edité par clemper 12 juin 2018 à 16:12:46

            • Partager sur Facebook
            • Partager sur Twitter
              12 juin 2018 à 16:51:57

              Sauf que le code ici present est du C et non du C++.
              • Partager sur Facebook
              • Partager sur Twitter

              Architecte logiciel - Software craftsmanship convaincu.

                12 juin 2018 à 16:54:46

                clemper a écrit:

                J'aimerai en c++ récupérer ...

                necros211 a écrit:

                le code ici present est du C

                Aurais-je déplacé trop vite le sujet du forum C vers C++ ? :D

                Faut dire que c'est trompeur quand même ...

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  12 juin 2018 à 16:55:21

                  .

                  -
                  Edité par clemper 12 juin 2018 à 16:56:25

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juin 2018 à 17:20:02

                    necros211 a écrit:

                    Sauf que le code ici present est du C et non du C++.


                    Ne compile-t-il pas en C++ (avec le code préliminaire qui va bien) ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 juin 2018 à 18:20:14

                      Le probleme n'est pas si cela compile ou non.

                      Un code invalide peux compiler en C++, et l'utilisation de char* ainsi que de sscanf sont des choix invalides aux yeux de la compatibilite avec la STL.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Architecte logiciel - Software craftsmanship convaincu.

                        12 juin 2018 à 18:31:41

                        En tout cas, C ou C++ on a cet avertissement pour chaque paramètre N :p

                        warning: format '%x' expects argument of type 'unsigned int *', but argument N has type 'char *' [-Wformat=]
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 juin 2018 à 1:42:29

                          necros211 a écrit:

                          Le probleme n'est pas si cela compile ou non.

                          Un code invalide peux compiler en C++, et l'utilisation de char* ainsi que de sscanf sont des choix invalides aux yeux de la compatibilite avec la STL.


                          Ca fait bien longtemps que je n'ai pas écrit de C++ (du temps où l'on se codait une class string soi-même). Les dernières normes C++ invalident-elles réellement une fonction comme sscanf, et surtout un type de base? Ce n'était pas du tout la philosophie de C++ à l'époque.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 juin 2018 à 14:17:00

                            Marc Mongenet a écrit:

                            Ca fait bien longtemps que je n'ai pas écrit de C++ (du temps où l'on se codait une class string soi-même). Les dernières normes C++ invalident-elles réellement une fonction comme sscanf, et surtout un type de base? Ce n'était pas du tout la philosophie de C++ à l'époque.

                            La fonction sscanf est une fonction qui ne doit normalement pas être utilisée en C++ car il n'y a pas reconnaissance des types.
                            Mais les compilateurs peuvent prendre des initiatives quand la chaîne de format est explicite, et indiquer des warnings si les paramètres ne sont pas conformes.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            En recherche d'emploi.

                              17 juin 2018 à 8:31:13

                              Ce n'est pas la norme qui invalide une fonction comme sscanf, c'est la pratique. sscanf laisse la possibilité d'introduire une incohérence entre la chaine de formatage et la va_list. A partir de l'instant où il existe une possibilité de faire une connerie, la loi de Murphy dit que tôt ou tard quelqu'un finira par la faire...

                              Sans même envisager la malveillance, nous ne sommes pas des dieux, on peut être fatigué, distrait, stessé... Il existe des infinités de situations où on va se trouver en position de commettre des erreurs.

                              Si on fait en sorte qu'il ne soit pas possible de commettre une erreur, personne ne la commettra. Les flux de c++ suppriment la nécessité de fournir une chaine de format, du coup il n'est plus possible qu'il y ait une incohérence, donc on a supprimé une possibilité d'erreur. Ensuite il peut quand même y avoir une erreur si le contenu du flux ne peut être converti, mais cette erreur pourra être détectée très tôt, car le flux va se mettre en erreur. Plus une erreur sera détectée tôt, plus vite elle sera corrigée, et plus ses conséquences ont de chance d'être faibles.

                              L'objectif premier de c++ est de produire du code robuste et fiable (et si possible, rapide), tout ce qui peut aider à réduire le risque d'erreur est bienvenu.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                                17 juin 2018 à 9:56:25

                                Tout cela est bel et bien. Ca n'empêche pas qu'un programmeur C++ doit donc continuer à connaître les fonctions de type scanf, sauf à être incapable de maintenir de l'ancien code (en production, stable et débugué depuis des décennies, ce qui n'empêche pas la nécessité de quelques modifications ponctuelles).
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 juin 2018 à 22:47:40

                                  Oui et non, oui parce qu'effectivement ça existe, et que dans le cadre de la maintenance de code existant en production, il faut être capable de lire et de comprendre ce genre de chose. Non parce que la maintenance de code un peu ancien,n'est jamais confiée à des débutants pour une raison toute simple, c'est presque toujours du code critique et stratégique (le reste a été refactoré ou carrément réécrit depuis longtemps), il est absolument hors de question de laisser qui que se soit y toucher tant qu'on n'a pas la certitude qu'il est parfaitement au point sur le programme. Pour ce qui concerne la production nouvelle, les impératifs de qualité font que ce genre de fonctions seront bannies au profit de techniques plus safe, du coup ne pas connaître ces fonctions n'est pas vraiment un handicap, si je ne les connais pas, il est assez peu probable que je sois tenté de les utiliser...

                                  -
                                  Edité par int21h 17 juin 2018 à 23:37:40

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

                                  Récupération de valeurs dans chaîne de caractères

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown