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 de plusieurs entiers vers chaine de caractères [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 35
    Par défaut Conversion de plusieurs entiers vers chaine de caractères
    Bonjour,
    Je souhaiterai convertir plusieurs entiers et les mettre les uns à la suite des autres dans une chaine de caractère mais le problème c'est que ca prend beaucoup de ligne avec des itoa et des strcat.

    Est-ce qu'il y a moyen de faire comme pour printf ?

    Car je voudrai stocker le résultat de ce printf dans une chaine de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("T%dmin : %02X%02X%02X\n", i/2 , hash.B[0], hash.B[1], hash.B[2]);
    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Par défaut
    Il suffit d'utiliser sprintf: même fonctionnement que printf, sauf que la sortie s'effectue dans une chaîne de caractères passée en premier argument:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(str, "T%dmin : %02X%02X%02X\n", i/2 , hash.B[0], hash.B[1], hash.B[2]);
    Fais juste attention au buffer overflow: il faut que ta chaîne de caractères soit suffisamment grande.

  3. #3
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 35
    Par défaut
    Merci ca marche,
    Par contre est-ce qu'on peut utilise un pointeur a un char au lieu d'un tableau de caractère avec cette fonction ?

    i contient le nombre de seconde depuis 1970 et j'aimerai le convertir en date + heure, est-ce qu'il y a moyen svp ?

    j'ai essayer avec ctime mais ca bug avec les histoires de pointeurs.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par azertylr
    Par contre est-ce qu'on peut utilise un pointeur a un char au lieu d'un tableau de caractère avec cette fonction ?
    Si le pointeur est correctement initialisé, oui. Si il pointe n'importe où ou sur quelque chose de non modifiable, ça ne fonctionnera pas, évidemment... Tu peux utiliser "%s"...
    i contient le nombre de seconde depuis 1970 et j'aimerai le convertir en date + heure, est-ce qu'il y a moyen svp ?
    struct tm
    localtime() (heure locale)
    gmtime() (heure GMT)
    strftime()

    Bien lire la doc, c'est très puissant.

  5. #5
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 35
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *ligne="\0";
    sprintf(ligne, "%02X%02X%02X : %s", hash.B[0], hash.B[1], hash.B[2], Convert_heure(t_debut + i));
    Ne marche pas.

    Pour convertir l'heure j'ai fait une bidouille qui marche mais ca ne me plait pas trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char * Convert_heure(signed long i)
    {
        time_t heure = ((i/2)+8415360)*60;
        ctime(&heure);
    }
     
    //Et ensuite j'utilise : 
     
        char ligne[30];
    sprintf(ligne,"%s", Convert_heure(i));

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par azertylr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *ligne="\0";
    sprintf(ligne, "%02X%02X%02X : %s", hash.B[0], hash.B[1], hash.B[2], Convert_heure(t_debut + i));
    Ne marche pas.
    Bah oui. Quels sont les mots que tu ne comprends pas dans

    "Fais juste attention au buffer overflow: il faut que ta chaîne de caractères soit suffisamment grande."

    D'autre part une chaine n'est pas modifiable. Il faut utiliser un tableau de char suffisamment grand :

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char ligne[128];
    sprintf (ligne, "%02X%02X%02X : %s", hash.B[0], hash.B[1], hash.B[2],
    Pour convertir l'heure j'ai fait une bidouille qui marche mais ca ne me plait pas trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char * Convert_heure(signed long i)
    {
        time_t heure = ((i/2)+8415360)*60;
        ctime(&heure);
    }
     
    //Et ensuite j'utilise : 
     
        char ligne[30];
    sprintf(ligne,"%s", Convert_heure(i));
    Purée, ça sert à quoi que je t'indique les pistes si tu ne les suis pas. Rappel :

    struct tm
    localtime() (heure locale)
    gmtime() (heure GMT)
    strftime()

    Bien lire la doc, c'est très puissant.

    et j'ajoute parce que tu ne m'as pas l'air très dégourdi...

    http://man.developpez.com/

  7. #7
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par azertylr
    Pour convertir l'heure j'ai fait une bidouille qui marche mais ca ne me plait pas trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char * Convert_heure(signed long i)
    {
        time_t heure = ((i/2)+8415360)*60;
        ctime(&heure);
    }
     
    //Et ensuite j'utilise : 
     
        char ligne[30];
    sprintf(ligne,"%s", Convert_heure(i));
    En plus de ce que t'ont dit mes deux estimables collègues, j'ai comme l'impression qu'il manque un "return" quelque part ici, tu ne trouves pas ?
    Le C n'est pas magique. Il ne suffit pas, en général, d'aligner des fonctions pour que ça tombe en marche.

    Pour t'en apercevoir rapidement, n'hésites pas à bien paramétrer ton compilateur...

Discussions similaires

  1. Caster un nombre de entier vers chaine de caractère
    Par ghir_ana dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/11/2011, 03h39
  2. Conversion entier vers chaine formatée
    Par mikaelm dans le forum Ruby
    Réponses: 2
    Dernier message: 19/06/2008, 13h43
  3. conversion entier vers chaine de caratères
    Par naima2005 dans le forum C++
    Réponses: 3
    Dernier message: 20/08/2006, 02h14
  4. Réponses: 5
    Dernier message: 15/11/2005, 12h57
  5. Entier vers chaine
    Par litbos dans le forum C
    Réponses: 6
    Dernier message: 28/10/2005, 14h58

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