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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 052 fois - Téléchargée 36 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
-
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
-
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
-
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 -
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
-
Salut,

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

chnickel>Ton code est parfait

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.