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 :

vecteurs de bits


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut vecteurs de bits
    Bonjour,
    comment fait -on des vecteurs de bits en C?

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct ma_structure_a_champs_de_bit
    {
      unsigned champ1 : 1;
      unsigned champ2 : 1;
      unsigned champ3 : 1;
    };

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Comment doit-on utiliser ce vecteur après?
    Sur quel site peut-on trouver un exemple de code sur les vecteurs de bits?
    Merci.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    Ensuite , j'aimerais faire des blocs comme en VHdl qui communique entre eux avec des bits de validations. est-ce possible en c? Si oui comment doit-on faire? merci.

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par sandball22
    Ensuite , j'aimerais faire des blocs comme en VHdl qui communique entre eux avec des bits de validations. est-ce possible en c? Si oui comment doit-on faire? merci.
    Tu n'as pas de type bit en C. Le C est incapable d'accéder directement à des objets de taille qui ne sont pas un multiple du byte.

    Tu peux soit utiliser des tableaux de char, soit te batir une couche qui manipule des bits.

  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 sandball22
    Bonjour,
    comment fait -on des vecteurs de bits en C?
    C'est pas vraiment possible... Il y a des bidouilles...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut
    typedef struct _Phase
    {
    unsigned char Tab[3]; /3*8=24bits
    } Phase;


    Voila ma structure comment fait-on ensuite pour initialiser ne valeur pour la phase?

    Phase= 00000000000000000000000; ?

    Merci de votre aide.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    telle qu'est faite ta structure, ce serait soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Phase phase1={0,0,0};
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Phase phase 1;
    phase1.tab[0]=0;
    phase1.tab[1]=0;
    phase1.tab[2]=0;
    Mais ce dont tu as besoin est plus quelque chose du genre
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    typedef union{
      unsigned char vecteur;
      struct _mesBits{
        unsigned bit00 : 1;
        unsigned bit01 : 1;
        unsigned bit02 : 1;
        unsigned bit03 : 1;
        unsigned bit04 : 1;
        unsigned bit05 : 1;
        unsigned bit06 : 1;
        unsigned bit07 : 1;
      }
    }tMyType;
     
    tMyType myVar;
    myVar._mesBits.bit00 = 1;
    myVar._mesBits.bit01 = 0;
    myVar._mesBits.bit02 = 1;
    ...
     
    printf("%d",myVar.vecteur); // affiche 5
     
    // Pour éclaicir le code tu peux faire un truc du genre
    #define CHIP_SELECT  myVar._mesBits.bit00
    #define CLOCK        myVar._mesBits.bit01
    #define READ_EN      myVar._mesBits.bit02
     
    // Ensuite si tu fais 
    myVar.vecteur = 5;
    // tu auras 
    // CHIP_SELECT == 1
    // CLOCK == 0
    // READ_EN == 1
    // à vrai

  9. #9
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par DaffyDuck
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    typedef union{
      unsigned char vecteur;
      struct _mesBits{
        unsigned bit00 : 1;
        unsigned bit01 : 1;
        unsigned bit02 : 1;
        unsigned bit03 : 1;
        unsigned bit04 : 1;
        unsigned bit05 : 1;
        unsigned bit06 : 1;
        unsigned bit07 : 1;
      }
    }tMyType;
     
    tMyType myVar;
    myVar._mesBits.bit00 = 1;
    myVar._mesBits.bit01 = 0;
    myVar._mesBits.bit02 = 1;
    ...
     
    printf("%d",myVar.vecteur); // affiche 5
     
    // Pour éclaicir le code tu peux faire un truc du genre
    #define CHIP_SELECT  myVar._mesBits.bit00
    #define CLOCK        myVar._mesBits.bit01
    #define READ_EN      myVar._mesBits.bit02
     
    // Ensuite si tu fais 
    myVar.vecteur = 5;
    // tu auras 
    // CHIP_SELECT == 1
    // CLOCK == 0
    // READ_EN == 1
    // à vrai
    Cette façon de faire dépend de l'implantation et n'est par conséquent absolument pas portable.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Citation Envoyé par mujigka
    Cette façon de faire dépend de l'implantation et n'est par conséquent absolument pas portable.

    Thierry
    Ben je le porte sur PC Windows, DSP Freescale, PIC, 8051 et ARM...

    Par contre, on ne garantie pas la taille réelle de la structure, qui elle dépend de l'architecture, mais je ne pense pas que ce soit réellement le problème ici. Je pense que le PO cherche un moyen de simuler un comportement d'une entité VHDL sur PC, et donc de faire un champ de bit comme en VHDL. La structure que je propose présente l'avantage de pouvoir faire en sorte d'accéder indépendamment à tous les bits de la structure et au vecteur entier. C'est une solution possible en sachant qu'il y en a plein.

  11. #11
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par sandball22
    typedef struct _Phase
    {
    unsigned char Tab[3]; /3*8=24bits
    } Phase;
    Ici, ta structure encapsule un tableau de unsized char dont la taille vaut 3 bytes. Rien ne dit que sa taille en bits soit de 24. En tous les cas, je n'ai pas l'impression de bien saisir ton problème initial... vecteur de bits ou vecteur de bytes?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #12
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par mujigka
    Ici, ta structure encapsule un tableau de unsized char dont la taille vaut 3 bytes. Rien ne dit que sa taille en bits soit de 24. En tous les cas, je n'ai pas l'impression de bien saisir ton problème initial... vecteur de bits ou vecteur de bytes?

    Thierry
    Bonjour Thierry,

    un unsigned char fait bien 8 bits non?

    donc 3 unsigned char font bien 3 * 8 = 24 bits.

    Peu importe si la structure fait plus que 24 bits. Le PO désire mémorise 24 bits en forme de vecteur.

  13. #13
    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 : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par jowo
    Bonjour Thierry,

    un unsigned char fait bien 8 bits non?

    donc 3 unsigned char font bien 3 * 8 = 24 bits.

    Peu importe si la structure fait plus que 24 bits. Le PO désire mémorise 24 bits en forme de vecteur.
    Non, la taille d'un unsigned char est de 1 byte, et la taille du byte dépend de l'implantation (La constante CHAR_BIT définie dans limits.h donne le nombre de bits utilisés pour représenter un char). Mais bon, comme tu dis, ce n'est pas le plus important ici. Une manière portable d'accéder aux bits d'un tableau de unsigned char est d'utiliser les opérateurs &, |, <<, >>, ^, ~.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #14
    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 jowo
    un unsigned char fait bien 8 bits non?
    Sur ta machine, peut être. Ce n'est pas garanti pas le langage C qui précise 'au moins 8-bit'.

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

Discussions similaires

  1. Vecteur sur 16 bits
    Par steph496 dans le forum VHDL
    Réponses: 0
    Dernier message: 29/06/2010, 17h57
  2. Unpack / transformation d'un vecteur de bits en tableau
    Par dubjulie dans le forum Langage
    Réponses: 5
    Dernier message: 19/02/2010, 19h34
  3. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  4. Debugger 16-32 bits
    Par Mat dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/06/2002, 11h34
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31

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