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 d'"int" en tableau de binaires ?


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 84
    Points : 58
    Points
    58
    Par défaut Conversion d'"int" en tableau de binaires ?
    Bonjour.
    J'ai besoin de conseilles :

    Je récupère une variable sous un "int"
    Ce qui m'intéresserait, c'est d'arriver à convertir les données binaires de cet entier vers un tableau :

    ex : j'ai 1234 (en binaire c'est 10011010010) que je dois ranger dans un tableau (un ViReal64) comme ceci : [1,0,0,1,1,0,1,0,0,1,0]

    Comment faire ?

    D'avance merci

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    2 questions à mon tour:
    - comment gères tu les différences de boutisme (endianness)?
    - un tableau de quoi? char? bool? unsigned int?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Bonjour,

    convertir un nombre de base 10 en bas 2 est largement faisable, il existe plusieurs methode qui doivent certainement etre decrite sur le net.

    Apres, il faudrait avoir plus de precision :
    - Le nombre est-il quelconque ou a-t'il un maximum ?
    Cela permettrai d'utiliser une astuce permettant de faire tres rapidement ce que tu veux



    Voici un exemple donné par notre "ami" google :
    http://www.apprendre-en-ligne.net/cr...ges/bases.html

    Et la methode "informatique" :
    http://www.shunsoft.net/ipcalc/helpfr/chap10.html

  4. #4
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par muquet
    Comment faire ?
    Renseignes toi sur les opérateurs bit à bit, dans ton cas c'est une boucle faisant à chaque fois un décalage « >> » suivis d'un masque « & 1».
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 84
    Points : 58
    Points
    58
    Par défaut merci
    Merci de vos réponses.

    La conversion déci-> bin ne pose effectivement pas trop de problèmes.
    C'est plus la méthode de rangement des données dans le tableau en décomposant bit par bit qui me turlupine.

    La piste proposée par ssmario2 me semble effectivement convenir...

    Pour nicolas.sitbon :
    Le tableau cible est un tableau de ViReal64 (c'est imposé par une fonction dans le code, c'est normalement pour décrire une courbe dans un générateur de trame arbitraire... mais moi je n'ai besoin que de donnée binaires.)
    Endianness : comme ces données "binaires" représentent un signal "carré" l'ensemble des données est rangé linéairement. Donc normalement, pas de problèmes.

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Si j'ai bien compris ta question. Tu peux résoudre ton problème avec des décalage de bit.

    Pour chaque bit que tu veux récupérer, tu décale tout a fond vers la gauche, puis a fond vers la droite. Ainsi il ne te reste plus que la valeur souhaitée.

    En plus claire si tu as 10110011;
    Pour récupérer le troisième bit (en partant de la gauche)
    tu fais:
    10110011<<2;
    Tu obtiens 11001100 (les bits non renseignes sont places a null)
    Et après tu décale tous tes bits vers la droite
    11001100>>7;
    Tu obtiens 0000001;
    Tu peux placer cette valeur dans un tableau.

    Tu peux rapidement automatiser tout ça avec une boucle, pour placer chaque bit dans une case de ton tableau.

    C'était bien ta question?

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 84
    Points : 58
    Points
    58
    Par défaut Merci
    Solution retenue :

    Bit[i] = (Val & ( 1 << i) ) ? 1 : 0;

    Merci pour vos réponses.

    Stéph

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Pour info, si vous avez de la mémoire disponible, une union int / champ de bit vous diminuera surement le temps de process nécessaire a la conversion:

    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
     
    union {
        struct {
            b0:1;
            b1:1;
            b2:1;
            b3:1;
            b4:1;
            b5:1;
            b6:1;
            b7:1;
            b8:1;
            b7:1;
            b9:1;
            b10:1;
            b11:1;
            b12:1;
            b13:1;
            b14:1;
            b15:1;
        };
        int16 Val;
    } Conversion;

  9. #9
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par muquet Voir le message
    Solution retenue :

    Bit[i] = (Val & ( 1 << i) ) ? 1 : 0;

    Merci pour vos réponses.

    Stéph
    Citation Envoyé par ssmario2
    Renseignes toi sur les opérateurs bit à bit, dans ton cas c'est une boucle faisant à chaque fois un décalage « >> » suivis d'un masque « & 1».
    comme ceci :
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

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

Discussions similaires

  1. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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