FONCTION DE CONVERSION D'UN NOMBRE DECIMAL EN HEXADECIMAL OU OCTAL

Signaler
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Messages postés
3
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
17 janvier 2005
-
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/20313-fonction-de-conversion-d-un-nombre-decimal-en-hexadecimal-ou-octal

Messages postés
3
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
17 janvier 2005

merci Tleg71 ce script m'a bien depanner :p
cependant j'ai un petit probleme:

J'ai modifer le script pour en faire une transformation de base 36

le probleme lorsque je convertit 7200585 en base 36, il me note 4ac9 aulien de 4ac09

Pourrais tu voir si j'ai fait une erreur


function DecTo36(n){
var tblCode = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
var BASE=36;
var Num = parseInt(n, 10);
var i;
var strHex = "";

if (! isNaN(Num)){
while (Num>0){
i=0;
while(Num/Math.pow(BASE, i++)>=BASE);
strHex += tblCode[Math.floor(Num/Math.pow(BASE, i-1))];
if (Num%BASE==0) strHex+="0";
Num = (Num % Math.pow(BASE, i-1));
}
return strHex;
}
else return 0;
}


Merci d'avance
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
j'avais bien dis que tout n'était pas testé
merci à tlg71 de signaler une erreur dans DecBase
et bien sûr aucun test n'est fait sur l'entrée des données
donc FF ( en décimal ) provoque une erreur
ce n'est pas le but de ces fonctions.
il faut faire les contrôles avant l'appel,
mais le sujet n'était pas là.
correction :
il faut faire while (v>=bas) et non pas while (v>base)

<HTML>
<HEAD>
<TITLE></TITLE>
<script type="text/javascript">
function DecBase(dec,bas) {
/////////////////////////////////////
//////// Décimal => base ////////
////////////////////////////////////
var h="",l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
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 appel()
{ var r=DecBase(parseFloat(dec.value),parseFloat(bas.value));
alert(r); }
</script>
</HEAD>

décimal :

base :

</HTML>
Messages postés
3
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
12 février 2004

je te propose le code suivant....

function DecToBase(n, ba){
var tblCode = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
var BASE=ba;
var Num = parseInt(n, 10);
var i;
var strHex = "";

if (! isNaN(Num)){
while (Num>0){
i=0;
while(Num/Math.pow(BASE, i++)>=BASE);
strHex += tblCode[Math.floor(Num/Math.pow(BASE, i-1))];
if (Num%(Math.pow(BASE, i-1))==0) strHex+="0";
Num = (Num % Math.pow(BASE, i-1));
}
return strHex;
}
else return 0;
}
Messages postés
3
Date d'inscription
mardi 7 octobre 2003
Statut
Membre
Dernière intervention
12 février 2004

C'est un bon début mais ces codes DecBase et BaseDec ne marchent pas beaucoup:
As-tu essayé de convertir le nombre décimal 16 en Hexa ?
resultat="G"

As-tu essayé de convertir le nombre 9 en base 8?
resultat=9. MAIS 9 n'est pas un nombre Octal!
tout comme FF en décimal te donne 165, FF n'est pas un nombre décimal!

a+ et bon courage pour le dbug
Afficher les 10 commentaires