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 :

Lecture de bits


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Lecture de bits
    Bonjour je travaille sur les tags mp3 de versions 2 et il y a une information vitale qui est contenu sur un octet donc un char et ces informations sont définit sur les 3 premiers bits en partant du bit de poids fort de cet octet.

    Je me demande comment pouvoir lire le contenu de ses 3 bits. Jai vu qu'on pouvais peut etre utilisé les champs de bits sont-ils utilisables avec un char ?? Si il faut passer par les champs de bits j'aimerai bien comprendre comment ca fonctionne exactement car niveau syntaxe ca va mais niveau initialisation je suis un peu perdu.

    Mais il n'y aurais pas une méthode moins compliqué afin de connaitre l'état de 3 bits de poids fort ??

  2. #2
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    tu peux utiliser un masque et l'operateur logique &

    tu fait un ET bit a bit avec un masque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char p = 'z';
     
    if(p & 4)
    {
    printf("bit 2(from LSB) True\n");
    }

  3. #3
    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 la_praline
    Bonjour je travaille sur les tags mp3 de versions 2 et il y a une information vitale qui est contenu sur un octet donc un char et ces informations sont définit sur les 3 premiers bits en partant du bit de poids fort de cet octet.

    Je me demande comment pouvoir lire le contenu de ses 3 bits. Jai vu qu'on pouvais peut etre utilisé les champs de bits sont-ils utilisables avec un char ??
    Surtout pas. Les champs de bits ne sont pas portables, on ne peut donc pas les utiliser pour réaliser des interfaces externes.

    http://emmanuel-delahaye.developpez....s.htm#bitfield

    Mais il n'y aurais pas une méthode moins compliqué afin de connaitre l'état de 3 bits de poids fort ??
    Il faut apprendre à utiliser les opérateurs bit à bit (Bitwise operators).

    >> << & | ~ ^

    Ceci peut aider :

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module BITS


    Il y a des tutoriels sur le net...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il faut apprendre à utiliser les opérateurs bit à bit (Bitwise operators).

    >> << & | ~ ^

    Ceci peut aider :

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module BITS
    J'ai étudié la bibliothèque bit.h je l'ai mis dans mon dossier include mais je t'avoue que je suis un peu perdu je vois bien qu'il y a des macros pour l'étude de chaque bit mais comment lui indiquer l'octet sur lequel je veux travaillé ??

  5. #5
    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 la_praline
    J'ai étudié la bibliothèque bit.h je l'ai mis dans mon dossier include mais je t'avoue que je suis un peu perdu je vois bien qu'il y a des macros pour l'étude de chaque bit mais comment lui indiquer l'octet sur lequel je veux travaillé ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       unsigned x = 0; /* tous les bits à 0 */
     
       mSET (x, BIT2); /* met le bit 2 à 1 */
     
       printf (mGET (x, BIT1)); /* affiche la valeur du bit 1 (0 ou 1) */
     
       printf (mVAL (x, 2, 1)); /* affiche la valeur des bit 2 et 1 (00, 01, 10 ou 11) */
    Si tu veux tester les bits 7 6 5 de x, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       unsigned b765 = mVAL (x, 3, 5); /* donnee, largeur, LSB */
    Exemple :
    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
     
    #include "ed/inc/bits.h"
    #include <stdio.h>
     
    int main (void)
    {
       unsigned x = bit6; /* 0100 0000 */
     
       unsigned b765 = mVAL (x, 3, 5);
     
       printf ("%02X\n", b765); /* 010 soit 2 */
     
       /* bit 7 = 1 */
       mSET (x, bit7);
     
       b765 = mVAL (x, 3, 5);
     
       printf ("%02X\n", b765); /* 110 soit 6 */
     
       return 0;
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Jai donc implanter le tout.

    Je fais :

    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
     
    char v2[11];
     
    for(i=0;i<10;i++)
    {fread(&v2[i],sizeof(char),1,tag->g);}
     
            if(v2[0]=='I' && v2[1]=='D' && v2[2]=='3')
            {
               unsigned flag;
     
                mSET(flag,v2[5]);
     
                unsigned b765 = mVAL (flag, 3, 5);
                printf("\n valeur : 0x%02X\n", b765);
    }
    J'ai une petite erreur car j'ouvre un fichier1 que je le lis et je fais le printf il m'affiche 0x07 lorsque j'ouvre un fichier2 si il m'affiche 0x01 et quand je reviens sur le fichier1 il m'affiche plus 0x07 mais 0x01

  7. #7
    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 la_praline
    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
     
    char v2[11];
     
    for(i=0;i<10;i++)
    {fread(&v2[i],sizeof(char),1,tag->g);}
     
            if(v2[0]=='I' && v2[1]=='D' && v2[2]=='3')
            {
               unsigned flag;
     
                mSET(flag,v2[5]);
     
                unsigned b765 = mVAL (flag, 3, 5);
                printf("\n valeur : 0x%02X\n", b765);
    }
    Le macros mSET(), mCLR() et mTGL() n'ont de sens que si la donnée a été initialisée...

    Je pense que tu voulais plutôt faire

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

Discussions similaires

  1. lecture de bit dans WinCC
    Par polen27 dans le forum Automation
    Réponses: 6
    Dernier message: 15/04/2008, 12h37
  2. Lecture de bits
    Par Benji59 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/04/2008, 11h56
  3. [WinCC-VBScript] lecture de bit
    Par ren973 dans le forum Automation
    Réponses: 7
    Dernier message: 12/07/2007, 16h07
  4. [WinCC-VBScript] lecture de bit
    Par ren973 dans le forum VBScript
    Réponses: 5
    Dernier message: 11/07/2007, 20h48
  5. Réponses: 5
    Dernier message: 03/06/2005, 14h06

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