
Modification par Demivec à ma demande, très grand merci à lui

Code : Tout sélectionner
; renvoie un nombre maintenant et pas une chaîne, similaire Val()
Procedure BinValEx(BinEx$, Depart = 0, Pas = 1, DepartBinEx$ = "0")
If Len(BinEx$)
If DepartBinEx$ = "0"
ProcedureReturn ((Val("%1" + BinEx$) - 2) * Pas) + Depart
Else
ProcedureReturn ((Val("%1" + BinEx$) - 2 - BinValEx(DepartBinEx$)) * Pas) + Depart
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.s BinEx(Nombre, Depart = 0, Pas = 1, DepartBinEx$ = "0")
If Pas < 1
ProcedureReturn ""
EndIf
Nombre - Depart
If Nombre < 0
ProcedureReturn ""
Else
Nombre / Pas
If DepartBinEx$ <> "0"
Nombre + BinValEx(DepartBinEx$)
EndIf
If Nombre < 2
ProcedureReturn Str(Nombre)
Else
ProcedureReturn Mid(Bin(Nombre + 2), 2)
EndIf
EndIf
EndProcedure
Define Nombre, BinEx$
Nombre = 5
BinEx$ = BinEx(Nombre, 5, 3, "0110")
Debug "Codé: " + BinEx$ + " = " + Str(Nombre) + ", Décodé: " + BinValEx(BinEx$, 5, 3, "0110")
For Nombre = 0 To 1000
BinEx$ = BinEx(Nombre)
Debug "Codé: " + BinEx$ + " = " + Str(Nombre) + ", Décodé: " + BinValEx(BinEx$)
Next
Nombre = Nombre à coder (Attention, ne dois jamais être inférieur à "Depart" et supérieur à 0), exemple 1000
Depart = Ont commence à partir d'un nombre (Ne dois jamais être inférieur à 0), par exemple 100
Pas = Ont va de tant à tant (Step), (Ne dois jamais être inférieur à 0), par exemple 2 (De 2 en 2)
DepartBinEx$ = Départ du codage, normalement ont commence à "0" mais maintenant ont peut mettre se qu'ont veux mais attention au dépassement de capacité !, par exemple "1011010010110"
Exemple:
Code : Tout sélectionner
; renvoie un nombre maintenant et pas une chaîne, similaire Val()
Procedure BinValEx(BinEx$, Depart = 0, Pas = 1, DepartBinEx$ = "0")
If Len(BinEx$)
If DepartBinEx$ = "0"
ProcedureReturn ((Val("%1" + BinEx$) - 2) * Pas) + Depart
Else
ProcedureReturn ((Val("%1" + BinEx$) - 2 - BinValEx(DepartBinEx$)) * Pas) + Depart
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.s BinEx(Nombre, Depart = 0, Pas = 1, DepartBinEx$ = "0")
If Pas < 1
ProcedureReturn ""
EndIf
Nombre - Depart
If Nombre < 0
ProcedureReturn ""
Else
Nombre / Pas
If DepartBinEx$ <> "0"
Nombre + BinValEx(DepartBinEx$)
EndIf
If Nombre < 2
ProcedureReturn Str(Nombre)
Else
ProcedureReturn Mid(Bin(Nombre + 2), 2)
EndIf
EndIf
EndProcedure
Depart = 50000
Pas = 2
DepartBinExe$ = "000000"
For Nombre = Depart To 60000 Step 2
BinEx$ = BinEx(Nombre, Depart, Pas, DepartBinExe$)
BinValEx$ = Str(BinValEx(BinEx$, Depart, Pas, DepartBinExe$))
Debug "Codé: " + BinEx$ + " = " + Str(Nombre) + ", Décodé: " + BinValEx$
Next