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

VB.NET Discussion :

Lire plusieurs bits consécutifs dans un octet.


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Lire plusieurs bits consécutifs dans un octet.
    Bonjour à tous,
    Savez vous comment faire ceci :

    J'ai un octet de 8 bits : "00010000" (=>16).
    Je voudrais extraire les 2 bits que j'ai soulignés c'est à dire "01" (=>1) .

    J'ai choisi les bits 5 et 6 en partant de la droite mais la fonction devra pouvoir extraire plusieurs bits consécutifs quelque soit leurs positions dans l'octet.

    Merci beaucoup pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    J'ai trouvé :

    Dim MyByte as Byte = 16
    MyByte = CByte(MyByte << 2 >> 6)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Typiquement pour faire ce genre de choses, on décale d'abord vers la droite de façon à ce que les bits voulus soient en position de bits de poids faible, et ensuite on fait un "ET" binaire avec un masque qui a juste les bits voulus à 1, ce qui a pour effet de mettre à 0 tous les autres bits.

    Donc dans ton cas, c'est comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyByte = CByte((MyByte >> 4) And 3)
    (ici le masque est 3 = b00000011)

    Si tu veux généraliser, pour prendre length bits à partir de la position offset (en comptant depuis la droite en partant de 0, donc dans ton scénario c'est 2 bits à partir du 5), tu peux utiliser une méthode comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Shared Function GetBits(b As Byte, offset As Integer, length As Integer) As Byte
    	Dim shift As Integer = offset - length + 1
    	If shift < 0 OrElse length > 8 OrElse offset > 7 Then
    		Throw New ArgumentOutOfRangeException()
    	End If
    	Dim mask As Byte = CByte(&Hff >> (8 - length))
    	Return CByte(mask And (b >> shift))
    End Function

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Merci beaucoup Tomlev

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/06/2009, 16h11
  2. Réponses: 6
    Dernier message: 30/11/2006, 18h15
  3. [Débutant] Lire plusieurs fichiers txt dans un répertoire
    Par leneuf dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/10/2006, 12h39
  4. Réponses: 12
    Dernier message: 18/06/2006, 19h42
  5. [Débutant][RISC]Compter le nombre de bit à 1 dans un octet ?
    Par Pill_S dans le forum Autres architectures
    Réponses: 7
    Dernier message: 23/12/2004, 23h24

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