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 :

Unsigned char vers char*


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut Unsigned char vers char*
    Bonjour !

    Question simple, comment passer de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    unsigned char aby_ipv4[4] = {10,5,2,212};
    à cela en char* (avec les points)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * c_ipv4 = "10.5.2.212";
    strcpy est-il une bonne piste ? Pour l'instant j'ai 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
    16
    17
    18
    19
     
    WORD w_ipv4_char_1 = aby_ipv4[0];
    WORD w_ipv4_char_2 = aby_ipv4[1];
    WORD w_ipv4_char_3 = aby_ipv4[2];
    WORD w_ipv4_char_4 = aby_ipv4[3];
     
    char * c_index_nb1 = reinterpret_cast<char * const>(&w_ipv4_char_1);
    char * c_index_nb2 = reinterpret_cast<char * const>(&w_ipv4_char_2);
    char * c_index_nb3 = reinterpret_cast<char * const>(&w_ipv4_char_3);
    char * c_index_nb4 = reinterpret_cast<char * const>(&w_ipv4_char_4);
     
    strcpy(c_path_node,(c_index_nb1));
    strcat(c_path_node,".");
    strcat(c_path_node,(c_index_nb2));
    strcat(c_path_node,".");
    strcat(c_path_node,(c_index_nb3));
    strcat(c_path_node,".");
    strcat(c_path_node,(c_index_nb4));
    puts(c_path_node);
    mais ça me sort ça Nom : Sans titre2.png
Affichages : 111
Taille : 2,5 Ko
    et je voudrai ça Nom : Sans titre.png
Affichages : 109
Taille : 2,5 Ko

    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    snprintf et _snwprintf (pour la version Unicode, mais non standard parce que ces abrutis ont mis 20 ans à la rajouter)

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    je précise que je fais une dll, je ne sais pas si snprintf fonctionne dans ce cas ?

  4. #4
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    et je suis sous VS 2010 ....

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le vrai snprintf() qui retourne la longueur à allouer (sans le caractère nul terminal) n'existe sous aucune version de Visual Studio que je connaisse (Microsoft s'assoit sur C99 comme si c'était un siège de toilettes). Par contre, tu as _scprintf() qui devrait te retourner la bonne longueur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    snprintf existe sous VC14 (VS15).
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Hé ben il ne leur aura fallu que seize ans... Mais c'est une excellente nouvelle néanmoins.
    C'est cohérent avec ce que j'ai dit, je n'ai pas d'install de VS 2015 sur aucun de mes postes.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Oui donc je ne l'ai pas

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Non testé, et à la bourrin

    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
        char ipv4_str[16]; // (max 3 chiffres) * 4 + 3  '.' + '\0'
        unsigned char index, step;
     
        index = 0;
     
        for(step = 0; step < 4; ++step) {
            if (aby_ipv4[step] <= 9) {
                ipv4_str[index] = ('0' + aby_ipv4[step]);
                index += 2;
            } else if (aby_ipv4[step] <= 99) {
                ipv4_str[index]     = ('0' + (aby_ipv4[step] / 10));
                ipv4_str[index + 1] = ('0' + (aby_ipv4[step] - ((aby_ipv4[step] / 10) * 10)));
                index += 3;
            } else {
                ipv4_str[index]     = ('0' + (aby_ipv4[step] / 100));
                ipv4_str[index + 1] = ('0' + ((aby_ipv4[step] - ((aby_ipv4[step] / 100) * 100)) / 10));
                ipv4_str[index + 2] = ('0' + (aby_ipv4[step] - ((aby_ipv4[step] / 10) * 10)));
                index += 4;
            }
     
            if (step < 3) { ipv4_str[index - 1] = '.'; }
        }
     
        ipv4_str[index - 1] = '\0';

  10. #10
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Merci foetus je te met un pouce pour l'investissement XD
    Je vais faire autrement dans mon code c'est pas grave (c'est trop le bordel sinon).

  11. #11
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Hé ben il ne leur aura fallu que seize ans... Mais c'est une excellente nouvelle néanmoins.
    C'est cohérent avec ce que j'ai dit, je n'ai pas d'install de VS 2015 sur aucun de mes postes.
    Je remettais pas en doute tes propos, j'apportais juste un complément d'info

    @phoenixgreg : utilise un vieux sprintf des familles.
    Plus je connais de langages, plus j'aime le C.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sous Visual 2010 et inférieur, tu peux utiliser ceci, qui reproduit le comportement standard de snprintf():
    http://www.developpez.net/forums/d15...oa/#post972738
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/02/2016, 15h54
  2. problème ce char vers char*
    Par KR_Prog dans le forum Langage
    Réponses: 9
    Dernier message: 17/09/2013, 21h15
  3. Casting char vers unsigned corrompu
    Par Sylvain Rousseau dans le forum Langage
    Réponses: 5
    Dernier message: 05/11/2009, 14h33
  4. pb conversion unsigned char vers char *
    Par FamiDoo dans le forum C
    Réponses: 11
    Dernier message: 24/08/2006, 18h11
  5. [Clé de registre] Conversion char* vers unsigned char*
    Par The Lord of Nesquik dans le forum C
    Réponses: 7
    Dernier message: 03/07/2006, 23h30

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