Conversion décimale/binaire & binaire/décimale

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 618 fois - Téléchargée 38 fois

Contenu du snippet

Deux fonctions de conversion Décimale/Binaire & Binaire/Décimale

Source / Exemple :


' CONVERSION D'UNE CHAINE BINAIRE EN VALEUR DECIMALE
'
' Binary : du type "100111001" (longeur max 32 caracteres)
' NbBits : nombre de bits a considérer
' Signed : la chaine binaire désigne une valeur décimale signée ou non
Public Function BinaryToDecimal(Binary As String, NbBits As Byte, Signed As Boolean) As Long
    Dim i As Byte
    BinaryToDecimal = 0
    If NbBits <= 1 Or NbBits > 32 Then Exit Function
    If Len(Binary) > NbBits Or Len(Binary) > 32 Then Exit Function
    Binary = Right("00000000000000000000000000000000" & Binary, NbBits)
    If Signed = False Then
        For i = 0 To Len(Binary) - 1
            BinaryToDecimal = BinaryToDecimal + Val(Mid(Binary, Len(Binary) - i, 1)) * 2 ^ i
        Next i
    Else
        For i = 0 To Len(Binary) - 2
            BinaryToDecimal = BinaryToDecimal + Val(Mid(Binary, Len(Binary) - i, 1)) * 2 ^ i
        Next i
        If Left(Binary, 1) = "1" Then
            BinaryToDecimal = -((2 ^ (NbBits - 1)) - BinaryToDecimal)
        End If
    End If
End Function
 
' CONVERSION D'UNE VALEUR DECIMALE EN CHAINE BINAIRE
'
' Decimal : valeur décimale à convertir
' NbBits : nombre de bits a considérer
' Completed : la chaine binaire est complétée de 0 si necéssaire
Public Function DecimalToBinary(Decimale As Long, NbBits As Byte, Optional Completed As Boolean) As String
    Dim L, B As String
    DecimalToBinary = ""
    If Decimale > (2 ^ NbBits) - 1 Then Exit Function
    If Decimale < -(2 ^ (NbBits - 1)) - 1 Then Exit Function
    If NbBits > 32 Then Exit Function
        
    If Decimale < 0 Then
        Decimale = 2 ^ NbBits + Decimale
    End If
    
    If Decimale = 0 Or Decimale = 1 Then L = "" Else L = 1
    Do
        If Decimale Mod 2 = 0 Then B = "0" Else B = "1"
        DecimalToBinary = DecimalToBinary & B
        Decimale = Decimale \ 2
    Loop Until Decimale <= 1
    DecimalToBinary = StrReverse(DecimalToBinary & L)
    If Completed = True Then
        DecimalToBinary = Right("00000000000000000000000000000000" & DecimalToBinary, NbBits)
    End If
End Function

A voir également

Ajouter un commentaire Commentaires
tfares Messages postés 5 Date d'inscription mardi 12 décembre 2000 Statut Membre Dernière intervention 19 juin 2008
19 juin 2008 à 20:07
salut leneuf22

VOTRE COE MARCHE POUR LES DECIMAL MAIS POUR LES TYPE DOUBLE ILFAIT UN DEPASSEMENT DE CAPACITE YA T IL SOLUTION
chnickel Messages postés 10 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 24 mai 2004
5 avril 2005 à 11:47
Oui tu as raison, il suffit de transmettre les parametres Decimale et Binary en ByVal....
cs_DarkSun Messages postés 17 Date d'inscription mardi 22 janvier 2002 Statut Membre Dernière intervention 24 février 2008
4 avril 2005 à 12:15
Niquel...

Petite remarque qui m'a causé des pb : tu modifies les parametres 'Decimale' et 'Binary' transmis à la procedure...

tu devrais plutot en faire une copie et travailler sur la copie...
Utilisateur anonyme
30 nov. 2004 à 21:40
Salut chnickel
Ca marche super bien... parfait
Merci
sallenou Messages postés 4 Date d'inscription dimanche 17 août 2003 Statut Membre Dernière intervention 21 juin 2010
26 août 2004 à 10:02
Salut,

leneuf22>Ton code ne marche pas pour des nombres trop élever.

chnickel>Ton code est parfait
Afficher les 6 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.