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 :

Passer d'un int à un tableau de char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant - Développeur Web/Logiciel
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant - Développeur Web/Logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut Passer d'un int à un tableau de char
    Bonsoir,

    Je cherche depuis quelque heures à transformer un int en tableau de char.
    Une petite représentation de la chose ?

    Mon int : 30
    Mon tableau de char : {'3','0'}

    Si vous vous demandez pourquoi je souhaite faire cela, et bien je travaille sur une communication entre deux programmes en utilisant les sockets et notamment grâce aux fonctions send() et recv() qui travaillent avec des chaînes de caractère en entrée.
    D'un côté j'envoie un int et j'aimerais pouvoir le récupérer de l'autre mais tout les exemples de code trouvés ne répondent pas à mes attentes.
    L'idée est donc de créer ce tableau de caractère, pour ensuite appliquer la fonction sscanf() lors de la réception comme expliqué ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char myarray[5] = {'-', '1', '2', '3', '\0'};
    int i;
    sscanf(myarray, "%d", &i);
    Merci d'avance pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour,

    Regarde du côté de sprintf ou mieux snprintf ou éventuellement sous GNU/Linux asprintf.

    exemple snprintf
    exemple asprintf

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant - Développeur Web/Logiciel
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant - Développeur Web/Logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut
    J'ai déjà essayé d'utiliser sprintf mais sans succès !
    Je vais donc jeter un coup d'oeil sur l'autre fonction que tu me conseilles, je te tiens au courant !

  4. #4
    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
    Comment as-tu essayé snprintf?
    Parce que c'est la solution habituelle.
    Il faut par contre prendre le soin de disposer d'un bloc mémoire à remplir (un char[] ou un char* avec un malloc déjà fait).
    snprintf (comme sprintf) ne crée pas le buffer de sortie.

    Plus intéressant:
    si tu donnes 0 comme taille à snprintf, le buffer ne sera pas écrit, mais la taille sera calculée et retournée.
    Cela signifie que tu peux utiliser la fonction pour savoir la taille à allouer (malloc).

    int snprintf( char *restrict buffer, int bufsz, const char *restrict format, ... );

    Writes the results to a character string buffer.
    At most bufsz - 1 characters are written. The resulting character string will be terminated with a null character, unless bufsz is zero.
    If bufsz is zero, nothing is written and buffer may be a null pointer, however the return value (number of bytes that would be written) is still calculated and returned.

  5. #5
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Si le but est d'envoyer un int via un socket il est plus efficient de le caster en char au moment de l'envoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(monsocket, (char)&monInt,sizeof(int),0);
    Enfin je pense...

  6. #6
    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
    Je ne sais pas si un socket n'attend pas une chaine (avec le '\0')
    Si c'est le cas, c'est une grave faille de sécurité que de procéder comme tu le propose.
    Car les octets suivants de la ram seront envoyé sur une socket.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/08/2011, 22h49
  2. Conversion d'un tableau int en tableau char
    Par lcoulon dans le forum Débuter
    Réponses: 7
    Dernier message: 11/12/2009, 11h53
  3. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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