5/5 (28 avis)
Vue 21 889 fois - Téléchargée 847 fois
''Ici une source pour convertir un Octet en binaire et inversement Option Strict On Private Function VersBinaire(ByVal octet As Byte) As String ''Ici on converti un octet vers un code binaire Dim bb As String = "" '' 'bb' contiendra le code binaire de 'octet' Dim lo As Integer = 0 '' 'lo' servira de compte pour savoir si l'élement précedent a été noté en 1 '' dans ce cas : lo sera incrémenté de 128 64 32 16 8 4 ou 2 sinon '' si l'élement précédent a été mis à 0, sa valeur restera inchangée. If octet >= 128 Then bb &= 1 : lo = 128 Else bb &= 0 : lo = 0 '' Si 'octet' est >= 128 '' le premier bit est à 1 dans 'bb' et 'lo' contiendra 128 If octet - lo >= 64 Then bb &= 1 : lo += 64 Else bb &= 0 : lo += 0 '' Pareil '' que précédemment : si 'octet' est >= 64 - 128 ou >= 64 - 0, alors noter '1' dans bb '' et incrémenter lo de 64 If octet - lo >= 32 Then bb &= 1 : lo += 32 Else bb &= 0 '' et ainsi de suite If octet - lo >= 16 Then bb &= 1 : lo += 16 Else bb &= 0 If octet - lo >= 8 Then bb &= 1 : lo += 8 Else bb &= 0 If octet - lo >= 4 Then bb &= 1 : lo += 4 Else bb &= 0 If octet - lo >= 2 Then bb &= 1 : lo += 2 Else bb &= 0 If octet - lo >= 1 Then bb &= 1 Else bb &= 0 '' A la fin on peux noter que si le nombre '' est impaire, le dernier bit sera toujours égal à 1 sinon, paire -> 0 ''Fin de l'algorythme, bb contient la code binaire de l'octet 'octet' Return bb '' La fonction renvoie bb '' Chr(octet) représente le caratère correspondant à la valeur de 'octet' (dans le tableau ASCII) '' octet peut aller de 0 à 255 inclus '' Hex(octet) converti 'octet' en hexadécimal '' le code binaire est expliqué ici : '' -128- 64- 32- 16- 8- 4- 2- 1 '' 1 0 0 0 0 0 0 0 - Ici on note une valeur de 128 car un 1 est à l'emplacement 128 '' 1 0 0 0 0 0 0 1 - Ici on note une valeur de 129 car un 1 est à l'emplacement 128 et 1 à l'emplacement 1 (128+1) '' 1 0 0 0 1 0 0 1 - Ici on note une valeur de 137 car un 1 est à l'emplacement 128 et 1 à l'emplacement 8 et un 1 est à l'emplacement 1 (128+8+1) '' 0 0 0 0 0 0 1 1 - Ici on note une valeur de 3 car un 1 est à l'emplacement 2 et 1 à l'emplacement 1 (2+1) '' 1 1 1 1 1 1 1 1 - Ici on note une valeur de 255 -> 128+64+32+16+8+4+2+1 '' Vous pouvez utiliser la calculatrice Windows pour compter '' en binaire octal hexadécimal ou décimal... End Function Private Function VersOctet(ByVal bits As String) As Byte ''Ici on converti un code binaire vers un octet 'MessageBox.Show(bits.Length) ''''Vérification du code binaire If bits.Length <> 8 Then MessageBox.Show("Le code binaire ne correspond pas un octet") : Exit Function '' Vérification que bits a bien la longueur convenue (bits.length doit être égal à 8) For i = 0 To 7 : If bits(i) <> "0" And bits(i) <> "1" Then MessageBox.Show("Erreur de code binaire, le code binaire ne peut contenir que des 1 et des 0") Exit Function End If : Next i ''Vérification que bits contient bien des 0 ou des 1 '''' Vous pouvez supprimer les vérifications si vous êtes sûr du code binaire à convertir Dim calcul As Byte = 0 ''Ici calcul contiendra le résultat If bits(0) = "1" Then calcul += CByte(128) If bits(1) = "1" Then calcul += CByte(64) If bits(2) = "1" Then calcul += CByte(32) If bits(3) = "1" Then calcul += CByte(16) If bits(4) = "1" Then calcul += CByte(8) If bits(5) = "1" Then calcul += CByte(4) If bits(6) = "1" Then calcul += CByte(2) If bits(7) = "1" Then calcul += CByte(1) Return calcul '' La fonction renvoie calcul End Function ''Utilisation : Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show(VersBinaire(Asc("a"))) '' Ou : 'MessageBox.Show(VersBinaire(97)) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click MessageBox.Show(VersOctet("01100001").ToString) '' Ou : 'MessageBox.Show(Chr(VersOctet("01100001"))) End Sub
20 juil. 2010 à 12:21
je ne sais plus pourquoi ! j'ai du mélanger les deux méthodes.
cela à du me géner de faire un And avec des integers :p
dsl ++
20 juil. 2010 à 12:12
20 juil. 2010 à 08:29
a quoi sert le masque ET sinon ?
20 juil. 2010 à 07:44
Celle avec le AND qui fait un "masque" puis divise par ce masque pour voir si on a 0 ou 1, n'est valable que pour le binaire et est peut être un peu moins clair à comprendre.
(Byte And C) \ C) mais c'est la même chose.
Exemple savoir si le bit 3 est true ou false dans la valeur 324
(324 And 2^3) \ 2^3)
(324 And 8) \ 8) => 01000100 And 00001000 = 0000000 donc 0
0/8 = 0
Donc le bit 3 est à false 324=(0100-(0)-100)
19 juil. 2010 à 21:07
Sérieusement j'espère qu'il arrivera à déchiffrer ce que j'ai écrit, mon écriture est quelque peu ... illisible. Mais bon, le principal c'est qu'il voie que j'ai procédé (comme dans le programme VB) par des divisions euclidiennes successives en utilisant la base comme diviseur et le reste de division comme chiffre trouvé. Evidemment faut lire les chiffres dans l'ordre inverse, vu qu'à la première division on trouve le LSB.
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.