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 :

Convertir int en chaine de char


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    .
    Inscrit en
    Mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2017
    Messages : 59
    Points : 39
    Points
    39
    Par défaut Convertir int en chaine de char
    Bonjour,
    je crée actuellement un programme traitant des fichiers, et je dois les renommer de manière incrémentale .
    J'ai donc une boucle qui permet de traiter chaque fichier, dans laquelle un compteur nombre s’incrémente a chaque tour.
    Je voudrais donc transformer cet int en char[] de la façon suivante:


    nombre = 0 -> char[] = "000000"
    nombre = 1 -> char[] = "000001"
    nombre = 2 -> char[] = "000002"
    nombre = 3 -> char[] = "000003"
    nombre = 4 -> char[] = "000004"
    nombre = 5 -> char[] = "000005"

    Comment puis-je faire cela ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 377
    Points : 23 663
    Points
    23 663
    Par défaut
    Bonjour,

    Ça se fait avec sprintf(), qui fonctionne exactement comme printf mais en renvoyant le résultat dans une chaîne de caractères en mémoire (s pour string) plutôt que vers un flux ou vers la sortie standard. Tu peux même utiliser snprintf() qui te permet en plus d'indiquer la taille de ton buffer pour éviter tout débordement.

    Code C : 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
    #include <stdio.h>
     
    int main (void)
    {
        int i;
        char buffer[256];
     
        for (i=0;i<10;i++)
        {
            snprintf (buffer, sizeof buffer, "file_%06d",i);
     
            printf ("Génération du nom de fichier : %s\n",buffer);
        }
     
        return 0;
    }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    .
    Inscrit en
    Mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2017
    Messages : 59
    Points : 39
    Points
    39
    Par défaut
    Pourtant sprintf() est de type int
    Comment peut-il alors retourner une chaîne de caracteres ?
    A quoi correspond la taille 256 du buffer ? au nombre max de caracteres dans ma chaine ?
    Et c'est donc le buffer qui contient mon nom de fichier final ?

    Merci quand même, ça m'avance beaucoup

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 377
    Points : 23 663
    Points
    23 663
    Par défaut
    Citation Envoyé par r4ph0u Voir le message
    Pourtant sprintf() est de type int
    Comment peut-il alors retourner une chaîne de caracteres ?
    La fonction printf() et toutes ses dérivées ne retournent pas la chaîne de caractères elle-même mais le nombre de caractères écrits. D'où le type int pour renvoyer cette information.

    En fait, on passe à la fonction l'adresse d'un emplacement en mémoire dans lequel elle va déposer son résultat, ainsi que la longueur maximum de cet emplacement. La fonction retourne ensuite la longueur totale de la chaîne générée, ce qui est utile non seulement parce qu'elle n'est pas forcément déterminée à l'avance, mais également parce que l'écriture peut échouer, soit parce que la fin du buffer est atteinte, soit parce qu'une erreur s'est produite en cours de transmission, dans le cas de l'écriture vers un fichier ou vers un canal de communication quelconque.

    Par ailleurs, le C ne ne gère pas nativement les chaînes de caractères, ni aucun objet « managé » dont la taille varierait à l'exécution. Par contre, sa bibliothèque standard propose un certain nombre de fonctions pour le faire explicitement au sein de ton programme. Les chaînes de caractères (ou de n'importe quel autre type, en réalité) sont donc gérées en passant un pointeur sur le premier caractère de cette chaîne, donc un « char * ». On lit le reste de la chaîne en incrémentant le pointeur.

    Il faut donc réserver un peu d'espace pour recevoir cette chaîne.

    A quoi correspond la taille 256 du buffer ? au nombre max de caracteres dans ma chaine ?
    Et c'est donc le buffer qui contient mon nom de fichier final ?
    Un buffer est le nom donné à une mémoire tampon, c'est-à-dire un espace servant à recevoir temporairement un bloc de donnée, traité ensuite par d'autres procédures.

    En l'occurrence, j'ai donc déclaré un tableau de 256 caractères consécutifs en mémoire. Cela revient donc à réserver 256 octets en mémoire. Et un tableau de caractères consécutifs en mémoire est exactement la façon dont est organisée une chaîne de caractère. On distingue la fin de celle-ci en plaçant un caractère nul ('\0') à la fin (ceci est fait automatiquement par toutes les fonctions manipulant des chaînes de caractères).

    Pourquoi 256 ? Il n'y aucune raison particulière à ce que cela soit ce chiffre, qui est choisi arbitrairement. Par contre, l'usage veut qu'en informatique, on utilise des puissances de 2 plutôt que des puissances de 10 car ce sont des nombres « ronds » en binaire. En outre, une variable locale est déclarée dans la pile, dont il faut absolument minimiser la consommation. Il faut donc choisir une valeur qui soit proche de la taille maximum des chaînes que tu vas engendrer, sinon exacte. « 256 » (ou 255) était jadis très utilisé comme longueur limite des caractères car cette longueur pouvait alors être inscrite dans un octet.

    Merci quand même, ça m'avance beaucoup
    Avec plaisir.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    .
    Inscrit en
    Mars 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mars 2017
    Messages : 59
    Points : 39
    Points
    39
    Par défaut
    Merci Beaucoup
    J'ai réussi a implémenter ça dans mon code, j'ai plus qu'a le rendre propre en créant des fonctions (plutôt que des longues séries d'instructions).

    En revanche, pour 256, tu dit que comme cela ça fait une ronde, d'accord, mais avec 100 par exemple, ça prend quand même moins de place non ? J'ai pas forcement des titres si longs..

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 377
    Points : 23 663
    Points
    23 663
    Par défaut
    Citation Envoyé par r4ph0u Voir le message
    En revanche, pour 256, tu dit que comme cela ça fait une ronde, d'accord, mais avec 100 par exemple, ça prend quand même moins de place non ? J'ai pas forcement des titres si longs..
    Tout-à-fait. Tu peux même utiliser 64, 32 ou même 10 caractères si tu es sûr de ne pas dépasser. Par contre, prévois-en toujours un de plus que la longueur maximale de ta chaîne pour le '\0' implicite.

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

Discussions similaires

  1. Convertir int en char, et vice vers ça
    Par Freeluvs dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 18/03/2010, 11h49
  2. convertir int en char
    Par pkpk94 dans le forum Débuter
    Réponses: 5
    Dernier message: 04/03/2010, 10h49
  3. convertir int to char
    Par modafine dans le forum C++
    Réponses: 9
    Dernier message: 30/04/2008, 09h24
  4. convertir int (32bits) en char(8bit)
    Par madjidri dans le forum C++
    Réponses: 2
    Dernier message: 28/05/2007, 18h50
  5. convertir int en Object et int en char
    Par djanos dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2007, 18h58

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