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 char en int


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 49
    Points
    49
    Par défaut Conversion de char en int
    Bonjour à tous,

    Avant tout, je vous explique un peu ce que je dois faire.

    Je dois simuler le comportement dd'un système de fichier. Pour aller vite, mon systeme de fichier est de type ext2, stocké en ram.

    Donc nos données sont stockées dans un gros tableau d'octet (en l'occurrence de char)

    Mon problème est que mes adresses sont stockées sur des int, et quand j'utilise les blocs d'adressages indirect de l'inode, je récupère des adresses pour pouvoir pointer sur mes blocs de données.

    Le problème, c'est que tout est stocké en char, et que je dois lire du int.

    Donc en gros ma question, comment convertir 4 char pour former un int ?

    J'espère que je me suis assez bien exprimé, sinon, dites le moi

    Merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par delovan
    Bonjour à tous,

    Avant tout, je vous explique un peu ce que je dois faire.

    Je dois simuler le comportement dd'un système de fichier. Pour aller vite, mon systeme de fichier est de type ext2, stocké en ram.

    Donc nos données sont stockées dans un gros tableau d'octet (en l'occurrence de char)

    Mon problème est que mes adresses sont stockées sur des int, et quand j'utilise les blocs d'adressages indirect de l'inode, je récupère des adresses pour pouvoir pointer sur mes blocs de données.

    Le problème, c'est que tout est stocké en char, et que je dois lire du int.

    Donc en gros ma question, comment convertir 4 char pour former un int ?

    J'espère que je me suis assez bien exprimé, sinon, dites le moi

    Merci
    Salut et bienvenue sur les forums de developpez.com

    En fait, tu peux créer une chaîne pour commencer avec par exemple la fonction sprintf puis une fois ceci de fait, il te reste plus qu'à la convertir en int avec la fonction strtol

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par delovan
    Bonjour à tous,

    Avant tout, je vous explique un peu ce que je dois faire.

    Je dois simuler le comportement dd'un système de fichier. Pour aller vite, mon systeme de fichier est de type ext2, stocké en ram.

    Donc nos données sont stockées dans un gros tableau d'octet (en l'occurrence de char)

    Mon problème est que mes adresses sont stockées sur des int, et quand j'utilise les blocs d'adressages indirect de l'inode, je récupère des adresses pour pouvoir pointer sur mes blocs de données.

    Le problème, c'est que tout est stocké en char, et que je dois lire du int.

    Donc en gros ma question, comment convertir 4 char pour former un int ?

    J'espère que je me suis assez bien exprimé, sinon, dites le moi

    Merci
    Tu peux essayer de faire comme cela:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <limits.h>
     
    int 
    main(void)
    {
        int i;
        long nombre;
        unsigned char bytes[4] = {0xff, 0xff, 0xff, 0x7f};
     
        for (i = 0, nombre = 0; i < 4; ++i)
        {
            nombre |= bytes[i] << (CHAR_BIT*i);
        }
        printf("nombre vaut: %d", nombre);
     
        return EXIT_SUCCESS;
    }
    Thierry

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Ha ! J'ai peut-être mal compris la question ?

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par Franck.H
    Ha ! J'ai peut-être mal compris la question ?
    C'est peut-être moi qui suis à côté...

    Thierry

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par mujigka
    Tu peux essayer de faire comme cela:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <limits.h>
     
    int 
    main(void)
    {
        int i;
        long nombre;
        unsigned char bytes[4] = {0xff, 0xff, 0xff, 0x7f};
     
        for (i = 0, nombre = 0; i < 4; ++i)
        {
            nombre |= bytes[i] << (CHAR_BIT*i);
        }
        printf("nombre vaut: %d", nombre);
     
        return EXIT_SUCCESS;
    }
    Thierry
    Ah !

    Merci bien Thierry ! C'est exactement ça que je voulais faire. J'avais pensé à la même solution il y a dix minutes a peine, en, bien sûr, beaucoup moins propre, structurée et surement pleine de bug

    Merci aussi à Franck pour avoir tenté . Me disais bien que j'avais pas super bien expliqué. enfin pas grave, j'ai ma réponse maintenant, et faire l'inverse ne devrait pas être plus difficile.

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par delovan
    Merci aussi à Franck pour avoir tenté . Me disais bien que j'avais pas super bien expliqué. enfin pas grave, j'ai ma réponse maintenant, et faire l'inverse ne devrait pas être plus difficile.
    C'était 1 chance sur 2 ... je l'aurais la prochaine fois

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par delovan
    Ah !

    Merci bien Thierry ! C'est exactement ça que je voulais faire. J'avais pensé à la même solution il y a dix minutes a peine, en, bien sûr, beaucoup moins propre, structurée et surement pleine de bug

    Merci aussi à Franck pour avoir tenté . Me disais bien que j'avais pas super bien expliqué. enfin pas grave, j'ai ma réponse maintenant, et faire l'inverse ne devrait pas être plus difficile.
    Pour ton tableau de bytes, il est important d'utiliser des chars non-signés, sinon tu risques d'avoir quelques surprises. Sinon, n'oublie pas le tag

    Thierry

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

Discussions similaires

  1. [Debutant] conversion de char en int
    Par Marc_3 dans le forum Langage
    Réponses: 9
    Dernier message: 31/08/2011, 12h02
  2. conversion unsigned char en int
    Par titou35 dans le forum Débuter
    Réponses: 5
    Dernier message: 17/06/2009, 14h12
  3. conversion d'une char* en int
    Par damien99 dans le forum MFC
    Réponses: 25
    Dernier message: 06/03/2006, 12h27
  4. [Conversion]Convertir un char[] en int
    Par ThanosT dans le forum Général Java
    Réponses: 10
    Dernier message: 11/11/2005, 12h23
  5. "Conversion" d'un char en int ou longueur
    Par Michaël dans le forum C
    Réponses: 6
    Dernier message: 15/08/2003, 11h40

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