cs_yvesyves
Messages postés561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és412Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention 7 avril 20081 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
OctetATest = le nombre décimal
Position = bit à tester
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és412Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention 7 avril 20081 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és412Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention 7 avril 20081 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 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és412Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention 7 avril 20081 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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
19 févr. 2007 à 19:44
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.
19 févr. 2007 à 18:03
a = OctetATes >> Position
If a And 1 Then POSITIONNE
19 févr. 2007 à 17:56
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
19 févr. 2007 à 17:54
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.
19 févr. 2007 à 17:51
19 févr. 2007 à 17:49
Avant de faire une méthode, il faudrait regarder si
elle n'existe pas déjà dans le framework !
19 févr. 2007 à 17:47
Ici le but est de faire une fonction qui converti et non pas d'appeler un fonction qui le fait...
19 févr. 2007 à 17:44
System.Convert.ToInt64(Valeur, FromBase), ToBase
Valeur = nombre à convertir
FromBase = 10
ToBase = 2
Cela renvoi un string
19 févr. 2007 à 17:41
For i = 0 To 7
TblBits(i) = Octet And 1
Octet >>= 1
Next i
19 févr. 2007 à 17:28
19 févr. 2007 à 09:33
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
19 févr. 2007 à 01:13
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é.
19 févr. 2007 à 01:07
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 ?
18 févr. 2007 à 23:58
18 févr. 2007 à 22:24