CONVERTISSEUR DÉCIMAL BINAIRE HEXADÉCIMAL OCTAL

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 17 juil. 2010 à 07:42
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 20 juil. 2010 à 12:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52045-convertisseur-decimal-binaire-hexadecimal-octal

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
20 juil. 2010 à 12:21
euh oui j'ai fait un cracage mentale là ^^
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 ++
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
20 juil. 2010 à 12:12
Pas besoin de diviser comme le dir Renfield, il suffit de vérifier si le résultat du AND est nul. Si ce n'est pas le cas, le bit est à 1.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
20 juil. 2010 à 08:29
pas génial Adn56 de venir mettre une division la dedans...

a quoi sert le masque ET sinon ?
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
20 juil. 2010 à 07:44
t'inquiéte c'est lisible, et puis c'est une méthode classique pour changer de base.
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)
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 juil. 2010 à 21:07
(J'avais envie de jouer avec mon scanner :p )
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.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
19 juil. 2010 à 21:02
quel patience ghuysmans99 !
perso j'ai laché l'affaire pour expliquer le AND que je fais....
US_30, toi et moi avons essayé, maintenant si il trouve son codage mieux, ben voila quoi...
/fin
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 juil. 2010 à 20:55
Tu peux, si ça t'aide à comprendre, exécuter mon code pas-à-pas pour voir les opérations qui s'effectuent. Utiliser des Ifs successifs est suicidaire en terme de performances et aussi en terme de code. Voilà comment s'effectue la méthode que je décris si on la fait à la main (les chiffres entourés sont les restes de division et il faut les lire de droite à gauche, comme l'indique la flèche) : http://img826.imageshack.us/img826/3476/conversionbinaire.png
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
19 juil. 2010 à 19:38
Salut, moi je la trouve bien ma Form ^^
J'ai préféré garder ma méthode, pour le snippet
de cette page et puis pour faire plus simple
qu'avec ta méthode que je n'ai d'ailleur pas encore comprise,
c'est moins optimisé c'est sûr mais c'est comme ça que j'aurai fait.
Le rapport avec la cryptographie est le décalage à gauche ou à droite
d'un code binaire que l'on peux voir avec mon programme que je
cherchais à faire... Et puis il y a la conversion en octal que
je trouvais intéressante. Donc des fonctions qui n'existent pas
dans vb(?) mais qui peuvent toujours servir, on ne sais jamais...
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 juil. 2010 à 19:15
Bon ben on va expliquer autrement ...
<mode type="pas-sympa">
1) L'interface est affreuse.
2) Le code pourrait être au moins deux fois plus court et je te l'ai montré !
3) Quel rapport avec la cryptographie ?
</mode>
talirafik Messages postés 1 Date d'inscription samedi 10 juillet 2010 Statut Membre Dernière intervention 19 juillet 2010
19 juil. 2010 à 19:02
je dois encore faire un option button qui permettra de convertir des nombre decimaux en hexadecimal et...
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
19 juil. 2010 à 18:24
et oubli la msgbox steuplé !
1-parcequ'en .NET c'est messagebox
2-parcequ'elle n'est pas là pour faire des fonctions ^^
pour t'en rendre compte place option strict = on en début de code et tu verra une zouli erreur !
note que ta méthode "barbare" va plus loin que la calculette qui bloque à ^90 ;)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 juil. 2010 à 18:08
2,22795970343528E+107 => virgule flottante : tu n'as pas tous les chiffres...
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
19 juil. 2010 à 16:17
Oui après ton post j'ai remarqué
qu'on pouvait calculer de très grands nombres
en texte, par exemple :
MsgBox("6399999999999999999999999999999999999999" * "616516132103210516103513510" * "56465465465465465465465465654654564654645")
renvoit :
2,22795970343528E+107
Est-ce que le résultat est correct ?
Après est-ce que c'est utilisable
pour faire des opérations comme si c'était des variables numériques ?
Sinon pour mon convetisseur il marche bien, s'agit de ne pas trop
forcer sur les nombres (limitation 32 bits (32 bits + 1 bit dans mon programme après il bug ;))) @+
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
18 juil. 2010 à 20:45
et ho ! faut peut être pas trop abuser lol
plus de 18446744073709551615 en binaire je ne sais même pas si c'est faisable ^^
cela correspond à 10 octets soit 80 x 1 est c'est la limite de la calculette
de windows !
ce qui correspond à Uint64
voir : http://msdn.microsoft.com/fr-fr/library/47zceaw7(VS.90).aspx
si tu veux pouvoir utiliser des grands nombres (double ou décimal) utilise un string en sortie de ta fonction de conversion ;) 1 ou 0 selon le résultat de la division, cela peut marcher non ?
mais l'inverse plantera je pense ^^
@++
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
18 juil. 2010 à 19:23
Salut, j'ai réglé la taille des textbox par rapport
au nombre maximal (binaire) que j'ai pu trouver
en faisant des essais multiples avec mon programme
et la calculatrice windows... Sinon pour trouver
un code binaire a partir d'un décimal le code
de ghuysmans99 marche très bien, ormis
le nombre 18446744073709551615 qui n'est
pas supporté sur Visual Basic
et qui donne une erreur de dépassement de capacité.
En fait pour faire la conversion vers binaire,
je commence a compter le nombre de chiffres binaires
avec 2 ^ i , donc la longueur du résultat,
pour faire un For de cette longueur et en fait
je fait comme ma source présente sur cette page
pour soit rajouter un 1 ou un 0...
Donc en comparant la position du chiffre binaire
avec 2 ^ position_du_chiffre binaire,
et si je met un 1, j'incrémente une variable
pour refaire l'opération... Je ne sais pas
pourquoi ma fonction marche avec de petits nombres
et qu'a partir d'un certain, le code rendu
n'est plus du tout exact.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
18 juil. 2010 à 19:03
ghuysmans99 et moi même avons poster deux solutions viable, peut être à placer sur codix ?
@ Raffika : sympa la form, mais le code est encore un peu étrange à mon gout.
Pourquoi de si grand champs de saisi si le code ne peux pas traiter les grands nombres ?
Regarde et inspire toi de ce code :
http://www.vbfrance.com/codes/CALC-BOOL-CALCULETTE-BOOLEENNE_44557.aspx
@++
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
18 juil. 2010 à 14:48
Bonjour,

Avec un petit peu de recherche, on trouve facilement des codes de conversion assez complet, entre autre :

http://support.microsoft.com/kb/463249/fr

et

http://support.microsoft.com/kb/109260/fr

... et raffika, tu as de la chance, ces codes ne sont pas en VB.NET... tu as de quoi t'amuser... De plus, il semble que sur Snippets, il n'y a rien en VB.NET sur ce sujet... Ce qui complètera ce manque....

Amicalement,
Us.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
17 juil. 2010 à 19:31
oups convertion implicite !
correction :
sBool &= Cstr((Val_entrees And C) \ C)
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
17 juil. 2010 à 19:27
oui cela ressemble, puisque c'est la même chose mais à l'envers lol.
Ghuy utilise la multiplication, tout comme j'aurais pû utiliser la division par 2 puissance n et regarder le reste
Ici je fais un AND logique (normal automaticien ^^), mais cela revient au même. ++

PS : c'est un snippet ^^
bonne continuation
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
17 juil. 2010 à 17:17
Oui donc ça ressemble un peu au code de
Ghuysmans99 là... A part que c'est un For et pas While...
Bon je vais voir s'il y a plus simple de Mod pour décimal
vers binaire... @+
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
17 juil. 2010 à 16:40
Finalement Decimal, c'est plus long !
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
17 juil. 2010 à 16:36
Ah oui c'est plus pratique comme ça, Adn56,
bon comme j'étais en train de reprogrammer
un peu tout ça je vais mettre à jour ma source.
Alors en fait je rajoute juste une fonction pour
passer d'un code binaire à une valeur décimale
donc avec un code binaire non limité (a part la
longeur de la variable (Long)...
Après, plus dur, faire l'inverse...
Merci pour vos commentaires
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
17 juil. 2010 à 16:29
oups c'est pas Val_entrees, mais byte biensûr ! dsl pour le double post*
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
17 juil. 2010 à 16:28
En effet, voici ce que j'utiliserai moi :
Private Function byteToSBool(byval byte as integer) as string
'conversion octet en bool
dim sBool as string = ""
'(8 bits sur un int)
For boucle As Integer = 0 To 7
Dim C As Integer = CInt(2 ^ boucle) 'calcul la puissance de 2 : 2^0,2^1,2^3,2^4
sBool &= CBool((Val_entrees And C) \ C)
next
return sBool
end function

@++ de tête alors ya peu une erreur de frappe :p
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
17 juil. 2010 à 15:00
Result += (Current * 2^(l-pos)) : je sais pas si c'est plus compréhensible comme ça.
En fait on multiplie le chiffre par la base exposant la position (à partir de la fin, c'est pour ça que je fais l-pos)

x Mod y = le reste de division euclidienne de X par Y
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
17 juil. 2010 à 12:04
Salut, Renfield j'ai mis ce code avec des fonctions,
qu'est ce que tu appelles converties en dur ?
Sinon, Ghuysmans99, je n'ai pas compris le code
que tu proposes surtout
Result += (Current * 2 ^ (l - pos))
et
Rest = Number Mod 2
...
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
17 juil. 2010 à 11:15
On peut vraiment faire plus court et plus propre que de Ifs successifs : http://pastebin.com/ggFmLqc6
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2010 à 07:42
pas optimal optimal...

sans compter que c'est inutilisable, fournis au moins des fonctions... La, les valeurs converties sont en dur, le resultat dans un MsgBox...