Transformer un Long Integer en une chaîne de 32 bits (0 et 1) et inversement

Le
Pierre Archambault
Bonjour à tous,

Je cherche un moyen de transformer un Long Integer en son équivalent binaire
(chaîne de 32 caractères "0" et "1") et inversement, c'est-à-dire,
transformer une chaîne de 32 caractères "0" et "1" en son équivalent Long
Integer.

Le problème que je rencontre est le suivant: je peux y arriver avec un
Integer (8 bits) mais pas plus.
Dépassement de capacité.

Voici le code de ma procédure
==
Public Function Binaire(Contenu As Variant, Sens As Boolean)
Dim n As Integer
Dim Résultat As Variant

Select Case Sens
Case True 'Contenu est une valeur Integer
Résultat = ""
For n = 7 To 1 Step -1
Résultat = Résultat & CStr(Abs(Contenu (2 ^ n) = 1))
Contenu = Contenu Mod (2 ^ n)
Next n
Résultat = Résultat & CStr(Abs((Contenu = 1)))
Case False 'Contenu est une chaîne de caractères
Résultat = 0
For n = 8 To 1 Step -1
Résultat = Résultat + Abs((Mid(Contenu, n, 1) = 1) * (2 ^ (8 -
n)))
Next n
End Select
Binaire = Résultat

End Function
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
JB
Le #4024931
Bonjour,

Dans la macro complémentaire Utilitaire Analyse, voir fonction
Decbin()

Sans macro complémentaire:

Function Base(b, n)
Do While n >= b
result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b >
0, (n Mod b) + 1, 1), 1) & result
n = n b
Loop
Base = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b > 0,
(n Mod b) + 1, 1), 1) & result
End Function

Sub essai()
Dim x As Long
x = 1234567898
y = Base(2, x)
MsgBox y
End Sub

http://cjoint.com/?lsiwpeAaHf

Cordialement JB

Bonjour à tous,

Je cherche un moyen de transformer un Long Integer en son équivalent bi naire
(chaîne de 32 caractères "0" et "1") et inversement, c'est-à-dire,
transformer une chaîne de 32 caractères "0" et "1" en son équivalen t Long
Integer.

Le problème que je rencontre est le suivant: je peux y arriver avec un
Integer (8 bits) mais pas plus.
Dépassement de capacité.

Voici le code de ma procédure
======================== ====================
Public Function Binaire(Contenu As Variant, Sens As Boolean)
Dim n As Integer
Dim Résultat As Variant

Select Case Sens
Case True 'Contenu est une valeur Integer
Résultat = ""
For n = 7 To 1 Step -1
Résultat = Résultat & CStr(Abs(Contenu (2 ^ n) = 1))
Contenu = Contenu Mod (2 ^ n)
Next n
Résultat = Résultat & CStr(Abs((Contenu = 1)))
Case False 'Contenu est une chaîne de caractères
Résultat = 0
For n = 8 To 1 Step -1
Résultat = Résultat + Abs((Mid(Contenu, n, 1) = 1) * (2 ^ (8 -
n)))
Next n
End Select
Binaire = Résultat

End Function


Pierre Archambault
Le #4024291
Merci JB

Quant à la partie qui consiste à faire l'opération inverse, ce sera plus
facile à faire.

Pierre


"JB"
Bonjour,

Dans la macro complémentaire Utilitaire Analyse, voir fonction
Decbin()

Sans macro complémentaire:

Function Base(b, n)
Do While n >= b
result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b >
0, (n Mod b) + 1, 1), 1) & result
n = n b
Loop
Base = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b > 0,
(n Mod b) + 1, 1), 1) & result
End Function

Sub essai()
Dim x As Long
x = 1234567898
y = Base(2, x)
MsgBox y
End Sub

http://cjoint.com/?lsiwpeAaHf

Cordialement JB

Bonjour à tous,

Je cherche un moyen de transformer un Long Integer en son équivalent
binaire
(chaîne de 32 caractères "0" et "1") et inversement, c'est-à-dire,
transformer une chaîne de 32 caractères "0" et "1" en son équivalent Long
Integer.

Le problème que je rencontre est le suivant: je peux y arriver avec un
Integer (8 bits) mais pas plus.
Dépassement de capacité.

Voici le code de ma procédure
=========================================== > Public Function Binaire(Contenu As Variant, Sens As Boolean)
Dim n As Integer
Dim Résultat As Variant

Select Case Sens
Case True 'Contenu est une valeur Integer
Résultat = ""
For n = 7 To 1 Step -1
Résultat = Résultat & CStr(Abs(Contenu (2 ^ n) = 1))
Contenu = Contenu Mod (2 ^ n)
Next n
Résultat = Résultat & CStr(Abs((Contenu = 1)))
Case False 'Contenu est une chaîne de caractères
Résultat = 0
For n = 8 To 1 Step -1
Résultat = Résultat + Abs((Mid(Contenu, n, 1) = 1) * (2 ^ (8 -
n)))
Next n
End Select
Binaire = Résultat

End Function


JB
Le #4024271
Dans ce post, il doit y avoir une solution:

http://groups.google.fr/group/microsoft.public.fr.excel/browse_frm/thread/1 d9c7f3770203226/122667ca56e44b00?lnk=gst&q=jb+base+36&rnum=1&hl=fr# 122667ca56e44b00

JB


Merci JB

Quant à la partie qui consiste à faire l'opération inverse, ce sera plus
facile à faire.

Pierre


"JB"
Bonjour,

Dans la macro complémentaire Utilitaire Analyse, voir fonction
Decbin()

Sans macro complémentaire:

Function Base(b, n)
Do While n >= b
result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b >
0, (n Mod b) + 1, 1), 1) & result
n = n b
Loop
Base = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b > 0,
(n Mod b) + 1, 1), 1) & result
End Function

Sub essai()
Dim x As Long
x = 1234567898
y = Base(2, x)
MsgBox y
End Sub

http://cjoint.com/?lsiwpeAaHf

Cordialement JB

Bonjour à tous,

Je cherche un moyen de transformer un Long Integer en son équivalent
binaire
(chaîne de 32 caractères "0" et "1") et inversement, c'est-à-dire,
transformer une chaîne de 32 caractères "0" et "1" en son équival ent Long
Integer.

Le problème que je rencontre est le suivant: je peux y arriver avec un
Integer (8 bits) mais pas plus.
Dépassement de capacité.

Voici le code de ma procédure
======================= =====================
Public Function Binaire(Contenu As Variant, Sens As Boolean)
Dim n As Integer
Dim Résultat As Variant

Select Case Sens
Case True 'Contenu est une valeur Integer
Résultat = ""
For n = 7 To 1 Step -1
Résultat = Résultat & CStr(Abs(Contenu (2 ^ n) = 1))
Contenu = Contenu Mod (2 ^ n)
Next n
Résultat = Résultat & CStr(Abs((Contenu = 1)))
Case False 'Contenu est une chaîne de caractères
Résultat = 0
For n = 8 To 1 Step -1
Résultat = Résultat + Abs((Mid(Contenu, n, 1) = 1) * (2 ^ (8 -
n)))
Next n
End Select
Binaire = Résultat

End Function




Pierre Archambault
Le #4023861
Bonjour JB

Je suis allé sur le site que tu me propose et j'y ai trouvé ce que je
cherchais sauf que celui qui a écrit le "post" l'a fait dans une syntaxe que
je n'arrive pas a comprendre. Il n'y a pas de signe "égal" (=) et il utilise
des caractères qui me semblent curieux.

Voici le code en question. Peut-on réécrire en clair?

'--------------convertir base x vers décimal
Function B2D(target, base As Integer)
Application.Volatile
Xbase "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
nbcar Len(target)
rang 0
XD 0
For i nbcar To 1 Step -1
pos InStr(Xbase, UCase(Mid(target, i, 1))) - 1
If pos > base Then B2D "?# base " & base: Exit Function
XD XD + (pos * (base ^ rang))
rang rang + 1
Next
B2D XD
End Function


'--------------convertir décimal vers base x
Function D2B(target As Double, base As Integer)
Application.Volatile
Xbase "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
DX ""
Do While target > base
DX Mid(Xbase, IIf(target Mod base > 0, (target Mod base) + 1, 1), 1) &
DX
target target base
Loop
D2B Mid(Xbase, IIf(target Mod base > 0, (target Mod base) + 1, 1), 1) &
DX
End Function


'--------------------convertir base x vers base y
Function B2B(target, base1 As Integer, base2 As Integer)
Application.Volatile
B2B D2B(B2D(target, base1), base2)
End Function


Voilà.

Merci pour ton aide.

Pierre




"JB"
Dans ce post, il doit y avoir une solution:

http://groups.google.fr/group/microsoft.public.fr.excel/browse_frm/thread/1d9c7f3770203226/122667ca56e44b00?lnk=gst&q=jb+base+36&rnum=1&hl=fr#122667ca56e44b00

JB


Merci JB

Quant à la partie qui consiste à faire l'opération inverse, ce sera plus
facile à faire.

Pierre


"JB"
Bonjour,

Dans la macro complémentaire Utilitaire Analyse, voir fonction
Decbin()

Sans macro complémentaire:

Function Base(b, n)
Do While n >= b
result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b >
0, (n Mod b) + 1, 1), 1) & result
n = n b
Loop
Base = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b > 0,
(n Mod b) + 1, 1), 1) & result
End Function

Sub essai()
Dim x As Long
x = 1234567898
y = Base(2, x)
MsgBox y
End Sub

http://cjoint.com/?lsiwpeAaHf

Cordialement JB

Bonjour à tous,

Je cherche un moyen de transformer un Long Integer en son équivalent
binaire
(chaîne de 32 caractères "0" et "1") et inversement, c'est-à-dire,
transformer une chaîne de 32 caractères "0" et "1" en son équivalent
Long
Integer.

Le problème que je rencontre est le suivant: je peux y arriver avec un
Integer (8 bits) mais pas plus.
Dépassement de capacité.

Voici le code de ma procédure
=========================================== > > Public Function Binaire(Contenu As Variant, Sens As Boolean)
Dim n As Integer
Dim Résultat As Variant

Select Case Sens
Case True 'Contenu est une valeur Integer
Résultat = ""
For n = 7 To 1 Step -1
Résultat = Résultat & CStr(Abs(Contenu (2 ^ n) = 1))
Contenu = Contenu Mod (2 ^ n)
Next n
Résultat = Résultat & CStr(Abs((Contenu = 1)))
Case False 'Contenu est une chaîne de caractères
Résultat = 0
For n = 8 To 1 Step -1
Résultat = Résultat + Abs((Mid(Contenu, n, 1) = 1) * (2 ^
(8 -
n)))
Next n
End Select
Binaire = Résultat

End Function




JB
Le #4023841
Function B2D(target, base As Integer) ' Base b--> décimal (MFPE
Modeste)
Application.Volatile
Xbase = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
nbcar = Len(target)
rang = 0
XD = 0
For i = nbcar To 1 Step -1
pos = InStr(Xbase, UCase(Mid(target, i, 1))) - 1
If pos > base Then B2D = "?# base " & base: Exit Function
XD = XD + (pos * (base ^ rang))
rang = rang + 1
Next
B2D = XD
End Function

Function B2Dec(chaine As String) ' Base 2 --> décimal
Application.Volatile
Dim temp As Long
n = Len(chaine)
For i = 1 To n
temp = temp + Mid(chaine, i, 1) * 2 ^ (n - i)
Next i
B2Dec = temp
End Function

En matriciel(Binaire -> décimal):

=SOMMEPROD(STXT(B2;LIGNE(INDIRECT("1:"&NBCAR(B2)));1)*(2^(NBCAR(B2)-LIGNE (INDIRECT("1:"&NBCAR(B2))))))

http://cjoint.com/?ltg1g14G3m

JB


Bonjour JB

Je suis allé sur le site que tu me propose et j'y ai trouvé ce que je
cherchais sauf que celui qui a écrit le "post" l'a fait dans une syntax e que
je n'arrive pas a comprendre. Il n'y a pas de signe "égal" (=) et il utilise
des caractères qui me semblent curieux.

Voici le code en question. Peut-on réécrire en clair?

'--------------convertir base x vers décimal
Function B2D(target, base As Integer)
Application.Volatile
Xbase "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
nbcar Len(target)
rang 0
XD 0
For i nbcar To 1 Step -1
pos InStr(Xbase, UCase(Mid(target, i, 1))) - 1
If pos > base Then B2D "?# base " & base: Exit Function
XD XD + (pos * (base ^ rang))
rang rang + 1
Next
B2D XD
End Function


'--------------convertir décimal vers base x
Function D2B(target As Double, base As Integer)
Application.Volatile
Xbase "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
DX ""
Do While target > base
DX Mid(Xbase, IIf(target Mod base > 0, (target Mod base) + 1, 1), 1) &
DX
target target base
Loop
D2B Mid(Xbase, IIf(target Mod base > 0, (target Mod base) + 1, 1), 1) &
DX
End Function


'--------------------convertir base x vers base y
Function B2B(target, base1 As Integer, base2 As Integer)
Application.Volatile
B2B D2B(B2D(target, base1), base2)
End Function


Voilà.

Merci pour ton aide.

Pierre




"JB"
Dans ce post, il doit y avoir une solution:

http://groups.google.fr/group/microsoft.public.fr.excel/browse_frm/thread /1d9c7f3770203226/122667ca56e44b00?lnk=gst&q=jb+base+36&rnum=1&hl=f r#122667ca56e44b00

JB


Merci JB

Quant à la partie qui consiste à faire l'opération inverse, ce se ra plus
facile à faire.

Pierre


"JB"
Bonjour,

Dans la macro complémentaire Utilitaire Analyse, voir fonction
Decbin()

Sans macro complémentaire:

Function Base(b, n)
Do While n >= b
result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b >
0, (n Mod b) + 1, 1), 1) & result
n = n b
Loop
Base = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", IIf(n Mod b > 0,
(n Mod b) + 1, 1), 1) & result
End Function

Sub essai()
Dim x As Long
x = 1234567898
y = Base(2, x)
MsgBox y
End Sub

http://cjoint.com/?lsiwpeAaHf

Cordialement JB

Bonjour à tous,

Je cherche un moyen de transformer un Long Integer en son équivalent
binaire
(chaîne de 32 caractères "0" et "1") et inversement, c'est-à-di re,
transformer une chaîne de 32 caractères "0" et "1" en son équiv alent
Long
Integer.

Le problème que je rencontre est le suivant: je peux y arriver avec un
Integer (8 bits) mais pas plus.
Dépassement de capacité.

Voici le code de ma procédure
======================= =====================
Public Function Binaire(Contenu As Variant, Sens As Boolean)
Dim n As Integer
Dim Résultat As Variant

Select Case Sens
Case True 'Contenu est une valeur Integer
Résultat = ""
For n = 7 To 1 Step -1
Résultat = Résultat & CStr(Abs(Contenu (2 ^ n) = 1))
Contenu = Contenu Mod (2 ^ n)
Next n
Résultat = Résultat & CStr(Abs((Contenu = 1)))
Case False 'Contenu est une chaîne de caractères
Résultat = 0
For n = 8 To 1 Step -1
Résultat = Résultat + Abs((Mid(Contenu, n, 1) = 1 ) * (2 ^
(8 -
n)))
Next n
End Select
Binaire = Résultat

End Function






Poster une réponse
Anonyme