Convertir un octet en 8 bits (10011101) bytestobits

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 494 fois - Téléchargée 23 fois

Contenu du snippet

Ceci est une petite fonction qui peut être très utile.
Elle permet de convertir un Octet (Byte) en un tableau Boolean (True ou False donc 1 ou 0 [True = -1])
J'utilise pour celà les opérations sur les bits et les décalages.

Source / Exemple :


Public Function ByteToBits(ByVal Octet As Byte) As Boolean()
        Dim TblBits(7) As Boolean 'Tableau de bits (Boolean)
        Dim ByteOperation As Byte = 128 'On commence avec 10000000
        Dim Bit As Byte 'On stocke un bit dans une valeur Byte de 8 octets

        For Iteration As Integer = 0 To 7 'Boucle
            Bit = Octet And ByteOperation 'On effectue l'opération And pour ne récupérer qu'un 1 ou 0 car ByteOperation ne contient qu'un bit à 1 donc le retour sera soit 0 soit une serie de 0 avec un 1.
            Bit >>= (7 - Iteration) 'On décale les bits pour que notre valeur soit la plus à droite ainsi on aura une valeur Byte de 1 ou de 0
            ByteOperation >>= 1 'On décale le bit 1 d'opération And d'abord placé à 10000000 puis 01000000 ouis 00100000 etc
            TblBits(Iteration) = CBool(-Bit) '-1 pour Trye et 0 pour False 'On convertit la valeur en Boolean c'est à dire si Bit = 1 alors il sera égale à -1 et si Bit = 0 alors il sera égale à 0 ;)
        Next
'C'est fini
  Return TblBits 'On renvoit
    End Function

A voir également

Ajouter un commentaire

Commentaires

Messages postés
561
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
11 octobre 2010

Public Function ByteToBits(ByVal Octet As Byte) As Boolean()
Dim TblBits(7) As Boolean 'Tableau de bits (Boolean)

For Iteration As Integer = 0 To 7 'Boucle
TblBits(Iteration) = Octet And 1
Octet >>= 1
Next

Return TblBits 'On renvoit
End Function

Voici donc le code le plus court de Draluorg. Merci a vous d'avoir optimiser mon code.

Oulà, je ne savais pas qu'il fallait tant d'octet pour codée une valeur String en .NET. Si j'ai bien compris vaut mieux travailler avec un tableau de Chars ou Bytes si on veut de la performence en recodant les fonction tel que Mid() Left() Instr() les comparaisons.

Non je ne voulais pas tester un Bit mais bien transformer tout l'octet en une suite de Bits que l'on peut manipuler après. Ce que je trouve sympa c'est qu'après on peut faire des fonctions pour transformer en x Bits. Si j'ai fais cette fonction c'est surtout pour les I/O sur les fichiers.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
Si 'Position' est le résultat d'un calcul donc dans une variable, tu vas amuser le cpu pour rien avec tous ces traitements.

a = OctetATes >> Position
If a And 1 Then POSITIONNE
Messages postés
412
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
7 avril 2008
1
Cela peut aider :

pour savoir si un bit est à 0 ou à 1
car je pense que c'est le but recherché de yvesyves

Return (OctetATest And (2 ^ (Position - 1))) = 2 ^ (Position - 1)

OctetATest = le nombre décimal
Position = bit à tester
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
String 1 octet par caractère, ça c'est pour char* en natif C ou ASM.
Pour vous c'est BSTR, 1 pointeur d'adresse (4 octets), 1 pointeur sur les données (4 octets), les donnéees à l'adresse (x octets), champ LEN, etc...
La lenteur n'est pas due au hasard.
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

je crois que ma premiere phrase dans mon dernier message répond a ta question!
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.