Changement de base

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 796 fois - Téléchargée 26 fois

Contenu du snippet

Convertir un nombre d'une base vers une autre.
copier/coller vers CB.hta ( par exemple )

Source / Exemple :


<HTML>
<HEAD>
<!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
<!                                >
<TITLE> Changement de Base </TITLE>
<!                                >
<!          Février 2004          >
<!   © Marcel.Bultez@Tiscali.fr   >
<!                                >
<!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
<style type="text/css"> 
.fnt {	font-family=Arial;
		font-size=11px;
		font-weight=bold; }
</style>
<!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
<script type="Text/JavaScript">
							//~~~~~~~~~~~~~~~~~~~~~
function BasDec(val,bas)	//~~ Base => Décimal ~~
							//~~~~~~~~~~~~~~~~~~~~~
{var d=0,l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 var p,v1,v2;
 for (var n=val.length-1;n>=0;n--)
	{	p=val.length-1-n;
		v1=val.charAt(n);
		v2=l.indexOf(v1);
		d=d+(v2*Math.pow(bas,p));	}
 return d;	}
							//~~~~~~~~~~~~~~~~~~~~~
function DecBas(dec,bas)	//~~ Décimal => Base ~~
							//~~~~~~~~~~~~~~~~~~~~~
{var h="",l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",r;
 var v=dec;
 while (v>=bas)
	{	q=Math.floor(v/bas);
		r=v-(bas*q);
		h=l.charAt(r)+h;
		v=q;	}
 h=l.charAt(v)+h;
 return h;	}
						//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function ctr(sel,txt)	//~~ contrôle de la valeur saisie ~~
						//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{for (var n=0; n < txt.length; n++)
  { var a=bas.substring(0,parseInt(sel[sel.selectedIndex].value));
    if (a.indexOf(txt.charAt(n))<0)  return n;     }
  return -1;     }
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~
function trans()	//~~ contrôle avant calcul ~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ te.value=te.value.toUpperCase();
  if (se.selectedIndex<0)
     { alert("choisir la base de départ");
       return;  }
  if (ss.selectedIndex<0)
     { alert("choisir la base du résultat");
       return;  }
  if (se.selectedIndex==ss.selectedIndex)
     { alert("Bases identiques, inutile ?");
       return;  }
  if (te.value.length<1) 
     { alert("donner une valeur de départ");
       return;  }
  var fin=false;
  while (!fin)
	{ if (te.value.charAt(0)=="0" )
               { te.value=te.value.substring(1,te.value.length);
                 if (te.value.length==0) fin=true; }
          else { fin=true; }  }
  if (te.value.length==0)
     { alert("0, quelque soit la base, c'est toujours 0");
	   return; }
  var e=ctr(se,te.value);
  if (e>=0)
     { alert("valeur de départ invalide\rCaractère "+
             (e+1)+" ("+te.value.charAt(e)+")");
       return;  }
  var trv;
  if (se[se.selectedIndex].value=="10")
           { trv=te.value; }
      else { trv=BasDec(te.value,se.selectedIndex+2); }
  if (ss[ss.selectedIndex].txt=="10")
           { ts.value=trv; }
      else { ts.value=DecBas(parseInt(trv),ss.selectedIndex+2);  }  }
</script>
</HEAD>
<BODY bgcolor=#FFCC99
      text=#400040>
<!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>
<table border=0>
<tr><td></td>
    <th><b>Base</th>
    <th><b>Valeur</th></tr>
<tr><td align=right><b>Nombre de Départ : </td>
    <td><select name=se
                class=fnt
                size=1></select></td>
    <td><input name=te
               type=text
               class=fnt
               size=32></td></tr>
<tr><td align=right><b>Résultat : </td>
    <td><select name=ss
				class=fnt
                size=1></select></td>
    <td><input name=ts
               type=text
               class=fnt
               size=32></td></tr>
<tr><td></td>
    <td><input type=button
               onclick="trans();"
               class=fnt
               value="Convertir"></td></tr>
</table>
<script type="Text/JavaScript">
		//~~~~~~~~~~~~~~~~~~~~
		//~~ initialisation ~~
		//~~~~~~~~~~~~~~~~~~~~
self.resizeTo(480,170);
var n,bas="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (var i=2; i < bas.length; i++)
    { se.length++;
      ss.length++;
      se[i-2].value=i;
      ss[i-2].value=i;
      switch (i) {
		case 2:
			n="Binaire";
			break;
		case 7:
      		n="Octal";
			break;
		case 10:
      		n="Décimal";
			se.selectedIndex=(i-2);
			break;
		case 16:
      		n="Héxa-Décimal";
			ss.selectedIndex=(i-2);
			break;
		default:
			n=i;
			break; }
      se[i-2].text=n;
      ss[i-2].text=n; 	}
</script>
</BODY></HTML>

Conclusion :


j'avais donné tous les éléments à je ne sais
plus qui pour faire ce petit programme.
comme on ne voit pas le résultat ici même,
je le fais.
si vous avez plus court (ou mieux) ,
s'il reste des bugs , merci de me le dire.

A voir également

Ajouter un commentaire Commentaires
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Mais il est vrai que j'aurais du
le signaler. C'est fait : merci.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
bien entendu JesusOnline.
ici, c'était un "exercice de style",
pour faire "manuellement" ces conversions.
@+
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
29
Il existe beaucoup plus simple :)

var n = new Number(2392);
alert(n.toString(36));

ca permet de convertir 2392 en base 36 :)

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.