CONVERTIR UN OCTET EN 8 BITS (10011101) BYTESTOBITS

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 18 févr. 2007 à 22:24
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010 - 19 févr. 2007 à 19:44
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41532-convertir-un-octet-en-8-bits-10011101-bytestobits

cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
19 févr. 2007 à 19:44
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.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 févr. 2007 à 18:03
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
Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 1
19 févr. 2007 à 17:56
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
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 févr. 2007 à 17:54
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.
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
19 févr. 2007 à 17:51
je crois que ma premiere phrase dans mon dernier message répond a ta question!
Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 1
19 févr. 2007 à 17:49
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 !
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
19 févr. 2007 à 17:47
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...
Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 1
19 févr. 2007 à 17:44
Encore plus court, une seule ligne :

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

Valeur = nombre à convertir
FromBase = 10
ToBase = 2
Cela renvoi un string
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
19 févr. 2007 à 17:41
Ou encore plus court :P

For i = 0 To 7
TblBits(i) = Octet And 1
Octet >>= 1
Next i
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
19 févr. 2007 à 17:28
-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.
Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 1
19 févr. 2007 à 09:33
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
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 févr. 2007 à 01:13
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é.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 févr. 2007 à 01:07
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 ?
Profil bloqué
18 févr. 2007 à 23:58
Si c'est du niveau initié c'est quoi le niveau débutant
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
18 févr. 2007 à 22:24
Utile et court => pensez codyx.org.
Rejoignez-nous