Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONVERTIR UN OCTET EN 8 BITS (10011101) BYTESTOBITS


Information sur la source

Catégorie :Fichier / Disque Source .NET ( DotNet ) Classé sous : byte, octet, bit, bits, tableau Niveau : Initié Date de création : 18/02/2007 Date de mise à jour : 18/02/2007 20:51:11 Vu : 15 349

Note :
Aucune note

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note


Description

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

  • 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
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

Historique

18 février 2007 20:51:11 :
J'ai oublié le Return lol

Commentaires et avis

signaler à un administrateur
Commentaire de Willi le 18/02/2007 22:24:13 administrateur CS

Utile et court => pensez codyx.org.

signaler à un administrateur
Commentaire de Galain le 18/02/2007 23:58:40

Si c'est du niveau initié c'est quoi le niveau débutant

signaler à un administrateur
Commentaire de BruNews le 19/02/2007 01:07:00 administrateur CS

C'est quoi le but ?

for i = 0 to 7
  if octet And 1 Then TblBits(i) = True
  Else TblBits(i) = False
  End if
  octet >>= 1
next

Ne ferait pas idem en plus court ?

signaler à un administrateur
Commentaire de BruNews le 19/02/2007 01:13:04 administrateur CS

Autre chose, le titre est totalement faux, un octet EST 8 bits mais un tableau Boolean ou autre ne sera jamais 'bit'.
Affecter -1 à un bit n'aurait aucun sens, un nbr est vu comme négatif si son bit de poids fort est psotionné, il est donc clair qu'un bit seul n'est ni négatif ni positif, seulement 0 ou <> 0.

Je persiste à croire que toucher aux interprétés avant d'avoir étudié ASM et C est une pure calamité.

signaler à un administrateur
Commentaire de Sirocooo le 19/02/2007 09:33:03

il y a infiniement plus simple :

System.Convert.ToInt64(Valeur, FromBase), ToBase

Valeur = nombre à convertir
FromBase = 10
ToBase = 2
Cela renvoi un string

On peut ansi passer de n'importe quelle base vers une autre

signaler à un administrateur
Commentaire de yvesyves le 19/02/2007 17:28:13

-1 est par définition la valeur de True mais elle peut prendre toutes les valeurs possible tant qu'elle ne sera pas égale à 0. Un bit à deux états pourquoi pas prendre le type Boolean? C'est mieux qu'un string qui prend de la mémoire 1 octet par caractère. On peut mieux travailler avec un tableau. C'est vrai qu'il y a plus rapide.

signaler à un administrateur
Commentaire de draluorg le 19/02/2007 17:41:46

Ou encore plus court :P

For i = 0 To 7
  TblBits(i) = Octet And 1
  Octet >>= 1
Next i

signaler à un administrateur
Commentaire de Sirocooo le 19/02/2007 17:44:42

Encore plus court, une seule ligne :

System.Convert.ToInt64(Valeur, FromBase), ToBase

Valeur = nombre à convertir
FromBase = 10
ToBase = 2
Cela renvoi un string

signaler à un administrateur
Commentaire de draluorg le 19/02/2007 17:47:12

mwai a condition d'avoir importer la classe system, pas formcement le cas dans toutes les appli...

Ici le but est de faire une fonction qui converti et non pas d'appeler un fonction qui le fait...

signaler à un administrateur
Commentaire de Sirocooo le 19/02/2007 17:49:28

mais pourquoi réinventer la poudre ?
Avant de faire une méthode, il faudrait regarder si
elle n'existe pas déjà dans le framework !

signaler à un administrateur
Commentaire de draluorg le 19/02/2007 17:51:52

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

signaler à un administrateur
Commentaire de BruNews le 19/02/2007 17:54:51 administrateur CS

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.

signaler à un administrateur
Commentaire de Sirocooo le 19/02/2007 17:56:14

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

signaler à un administrateur
Commentaire de BruNews le 19/02/2007 18:03:15 administrateur CS

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

signaler à un administrateur
Commentaire de yvesyves le 19/02/2007 19:44:38

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Recupere bit par bit les données d'1 octet [ par Falbala ] BonjourJ'ai un gros pb... Je récupère un octet et je dois tester chaque bit car ils correspondent chacun à un flag.Par exemple:1 0 0 0 1 0 0 1 RS232 [ par FloZix ] bonjour,J'ai besoin de communiquer avec le port série (RS232) et je ne sais pas comment m'y prendre. Je vous explique ce que je veux faire :J'ai circu .NET : Stocker un tableau de tableau de Byte dans un fichier [ par Scurio ] SalutEst-ce que quelqu'un à une idée pour stocker de façon simple un tableau de tableau de Byte dans un fichier pour pouvoir le récupérer par la suite Transtypage : Byte() ---> String [ par jockos ] Bonjour,Existe t-il une fontion VB toute faite qui permette de TRANSTYPER un tableau dynamique Binaire (Byte()) en une chaine de caractères (String).E Passage d'un tableau de byte à une fonction encapsulé dans un ACtiveX Dll [ par novik ] J'aimerai pouvoir passer un tableau de Byte a ma fonction (Activex Dll)lors de l'appel j'ai une erreur Type Mismatch.Or lorsque j'appelle cette foncti Lire un fichier Bits par Bits et Non octets Par octet [ par greg13 ] Je me demande comment je peux faire pour lire tout les bits d'un fichier(Ex : 01001011 ...)MerciGreg VB.NET+SQL SERVER+IMAGE [ par crilun ] crilunBonjour,J'ai une petit soucis en VB.NET,je dois a partir d'un champ contenant le chemin d'une photo inserer dans un un autre champ cette photo s convertir un tableau de byte [ par billy21121 ] Bonjour a tous, J'ai une question qui pourrait sembler c.... mais je voudrais savoir comment convertir un tableau de byte en tableau de string en vb.n bits de registres [ par vecchio56 ] Salut,Je cherche le moyen le plus rapide de-connaitre le bit numero n d'un registre-mettre à b le bit numero n d'un registre(Ou si c'est possible mett SetDIBits [ par dhylde ] Salut, J'ai juste une petite question, selon MSDN le param&#232;tre " CONST VOID *lpvBits, // array of bitmap bits" de&nbsp; SetDIBits est un un


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.