Aller au contenu

Hexadecimal


Jeremy

Messages recommandés

pour convertir un nombre hexa en décimale, rien de plus simple. Prends ton nombre en hexa et sépare le en chiffres (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) et en partant de gauche multiplie le par des puissances de 16 successives.

ex : 0x 123c= (16^0)x12 + (16^1)x3 + (16^2)x2 + (16^3)x4.

Je te laisses faire le calcul. Sinon pour pas te prendre la tête, le plus simple est de faire un prog.

Lien vers le commentaire
Partager sur d’autres sites

Je vient de retrouver un vieux prog qui me servait bien. Si le nombre commence par 0 (on suppose qu'il y a un x derrière 0x) alors il converti hexa-> décimal. sinon, il convertit décimal -> hexa.

#include<stdio.h>

int main(void)

{

   char buff;

   long number;

   long i;

   char hexa[10];

   while((buff=getchar())!=45)

   {

       if(buff==48)

       {

           getchar();

           number=0;

           while((buff=getchar())!='n')

           {

               if(buff>64)

                   number=16*number+buff-55;

               else

                   number=16*number+buff-48;

           }

           i=10;

           while(i<number)

               i*=10;

           while(i=i/10)

           {

               putchar(number%i+48);

               number/=10;

           }

putchar('n');

       }

       else

       {

           number=buff-48;

           while((buff=getchar())>47 && buff<58)

               number=10*number+buff-48;

           i=0;

           while(number)

           {

               hexa=number%16;

               if(hexa>9)

                   hexa[i++]+=55;

               else

                   hexa[i++]+=48;

               number/=16;

           }

           putchar(48);

           putchar(120);

           while(i)

           {

               putchar(hexa[--i]);

           }

           putchar(10);

       }

   }

}

Lien vers le commentaire
Partager sur d’autres sites

pour convertir un nombre hexa en décimale, rien de plus simple. Prends ton nombre en hexa et sépare le en chiffres (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) et en partant de gauche multiplie le par des puissances de 16 successives.

ex : 0x 123c= (16^0)x12 + (16^1)x3 + (16^2)x2 + (16^3)x4.

Je te laisses faire le calcul. Sinon pour pas te prendre la tête, le plus simple est de faire un prog.

g pa compris ton exemple :fou::mdr: peut tu reexpliker plz je suis un peu con je sais :yes::p

Lien vers le commentaire
Partager sur d’autres sites

pour convertir un nombre hexa en décimale, rien de plus simple. Prends ton nombre en hexa et sépare le en chiffres (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) et en partant de gauche multiplie le par des puissances de 16 successives.

ex : 0x 123c= (16^0)x12 + (16^1)x3 + (16^2)x2 + (16^3)x4.

Je te laisses faire le calcul. Sinon pour pas te prendre la tête, le plus simple est de faire un prog.

heuu, petite erreur :mdr: , il fallait lire

0x 123c= (16^0)x12 + (16^1)x3 + (16^2)x2 + (16^3)x1

Une autre solution est de séparer les chiffres en partant de la droite et de les multiplier par 16. Avec le même exemple, ça donne :

0x c = c*1= 12*1

0x 3c = ((c*1)+3)*16 = ((12*1)+3)*16

0x 23c = ((((c*1)+3)*16)+2)*16

0x 123c = ((((((c*1)+3)*16)+2)*16)+1)*16

Lien vers le commentaire
Partager sur d’autres sites

pour convertir un nombre hexa en décimale, rien de plus simple. Prends ton nombre en hexa et sépare le en chiffres (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) et en partant de gauche multiplie le par des puissances de 16 successives.

ex : 0x 123c= (16^0)x12 + (16^1)x3 + (16^2)x2 + (16^3)x4.

Je te laisses faire le calcul. Sinon pour pas te prendre la tête, le plus simple est de faire un prog.

heuu, petite erreur :oops: , il fallait lire

0x 123c= (16^0)x12 + (16^1)x3 + (16^2)x2 + (16^3)x1

Une autre solution est de séparer les chiffres en partant de la droite et de les multiplier par 16. Avec le même exemple, ça donne :

0x c = c*1= 12*1

0x 3c = ((c*1)+3)*16 = ((12*1)+3)*16

0x 23c = ((((c*1)+3)*16)+2)*16

0x 123c = ((((((c*1)+3)*16)+2)*16)+1)*16

en fait ds le 1ere exemple c en partan de droite pa de gauche (voir ta premiere reponse )

Lien vers le commentaire
Partager sur d’autres sites

Chuuuuuut :oops: Oui, en fait ça fait deux erreurs. Faut pas le dire trop fort. ck1.gif .

bon je me tait mtn ok ? :mad2::mad2: en fait c ke j av un doute donc bon je preferai l eclairer ms bon faut pa t ecuser c deja sympa d avoir repondu (a plusieur reprise)

PS:l erreur est humaine. :mad2::mdr::eeek2:

Lien vers le commentaire
Partager sur d’autres sites

Chuuuuuut :mad2: Oui, en fait ça fait deux erreurs. Faut pas le dire trop fort. ck1.gif .

bon je me tait mtn ok ? :8 :byebye: en fait c ke j av un doute donc bon je preferai l eclairer ms bon faut pa t ecuser c deja sympa d avoir repondu (a plusieur reprise)

PS:l erreur est humaine. :mad2::mdr::eeek2:

Je me suis pas excusé, j'ai humblement reconnu mes erreurs. :oops: (bon joueur quand même).

Errare humanum est, perseverare diabolicum :mad2: .

Sinon, ravi de t'avoir aidé.

Lien vers le commentaire
Partager sur d’autres sites

une solution hyper rapide pour calculer : utiliser la calculatrice de windows

il suffit de passer en mode scientifique

par défaut, la calculatrice est placée en 'dec' --> décimal , dès que tu saisis la valeur, tu sélectionnes 'hex' et hop tu as la valeur hexadécimal

et tu peux l'avoir aussi en octal

chouette comme joujou :D:yes:

Lien vers le commentaire
Partager sur d’autres sites

Salut!

la notation "0x.." indique que dans ton programme tu utilises une valeur en hexadecimal.

Par exemple

en haxadecimal => 0xAA

en binaire => 10101010

Perso,j'utilise cette notation essentiellement pour le langage C.

Pour l'assembleur,on notera "h'AA"

Lien vers le commentaire
Partager sur d’autres sites

Pour l'assembleur,on notera "h'AA"

Non, pour l'assembleur, en tout ces pour les asm Intel, c'est :


5860h           ;si t'as que des chiffres

0AAFh          ;si tu commences par une lettre, pour pas confondre avec les etiquettes

Tu peux meme utiliser 'RADIX 16' pour changer la base de travail par defaut, ici changee en base 16 (hexa).

Lien vers le commentaire
Partager sur d’autres sites

prenons mon post comme un complément de réponse :-)  :incline:

Vi vi :craint:

De toutes façons, je crois que les jeux d'instructions sont differents (entre cpu et micro-controleur) c'est pour ça qu'il y'a eu confusion ...à confirmer bien sûre (je n'ai jamais etudié la structure des cpu!!!)

Jeremy > Au fait, si tu veux faire des conversions hexa>bin ou hexa>déc ,etc... tu peux prendre une calculette (des fx4200 aux graph100).

Perso je n'utilise pas de calculette car ça embrouille au niveau du binaire (sens de lecture/ecriture).Mais c'est un moyen comme un autre!

Lien vers le commentaire
Partager sur d’autres sites

Ben ton printf sert à affiché le resultat!!!

Il manque la partie la plus importante de ton programme;La conversion!!!

:craint::-D:-D

non???

non non :craint:

Tu peux mettre

mavaleur = 12;

ou bien

mavaleur=0xD;

c'est pareil...

Effectivement, ça ne répond pas à la question originelle... mais les options des Xprintf/Xscanf sont trop souvent mal connues ! Alors si j'peux ajouter mon grain d'sel :craint: ;o)

Lien vers le commentaire
Partager sur d’autres sites

Je vient de retrouver un vieux prog qui me servait bien. Si le nombre commence par 0 (on suppose qu'il y a un x derrière 0x) alors il converti hexa-> décimal. sinon, il convertit décimal -> hexa.

#include<stdio.h>

int main(void)

{

   char buff;

   long number;

   long i;

   char hexa[10];

   while((buff=getchar())!=45)

   {

       if(buff==48)

       {

           getchar();

           number=0;

           while((buff=getchar())!='n')

           {

               if(buff>64)

                   number=16*number+buff-55;

               else

                   number=16*number+buff-48;

           }

           i=10;

           while(i<number)

               i*=10;

           while(i=i/10)

           {

               putchar(number%i+48);

               number/=10;

           }

putchar('n');

       }

       else

       {

           number=buff-48;

           while((buff=getchar())>47 && buff<58)

               number=10*number+buff-48;

           i=0;

           while(number)

           {

               hexa=number%16;

               if(hexa>9)

                   hexa[i++]+=55;

               else

                   hexa[i++]+=48;

               number/=16;

           }

           putchar(48);

           putchar(120);

           while(i)

           {

               putchar(hexa[--i]);

           }

           putchar(10);

       }

   }

}

Salut!

Je viens d'essayé ce programme mais je ne comprend pas car il ne fait que convertir le decimal en hexa et pas l'inverse!

Lien vers le commentaire
Partager sur d’autres sites

Salut!

Je viens d'essayé ce programme mais je ne comprend pas car il ne fait que convertir le decimal en hexa et pas l'inverse!

Tu peux essayer ça :


#include <stdio.h>

#include <stdlib.h>



int main(int argc,char * argv[])

{

 char *endp;

 char s[100];

 long l;



 if(gets(s))//on prend la premiere ligne entree

 {

   l = strtol(s, &endp, 0);//tentative de convertion

   if (s != endp && *endp == '')//si tout s'est bien passe...

     printf("Valeur en decimal = %ld, en hexa = %lXn", l,l);//...on affiche

   else

     return 1;//sinon on retourne en erreur

 }

 else

   return 1;//erreur lors de la saisie

return 0;//OK

}

Les hexas commencent bien sur par 0x... ou 0X...

Lien vers le commentaire
Partager sur d’autres sites

Je vient de retrouver un vieux prog qui me servait bien. Si le nombre commence par 0 (on suppose qu'il y a un x derrière 0x) alors il converti hexa-> décimal. sinon, il convertit décimal -> hexa.

#include<stdio.h>

int main(void)

{

   char buff;

   long number;

   long i;

   char hexa[10];

   while((buff=getchar())!=45)

   {

       if(buff==48)

       {

           getchar();

           number=0;

           while((buff=getchar())!='n')

           {

               if(buff>64)

                   number=16*number+buff-55;

               else

                   number=16*number+buff-48;

           }

           i=10;

           while(i<number)

               i*=10;

           while(i=i/10)

           {

               putchar(number%i+48);

               number/=10;

           }

putchar('n');

       }

       else

       {

           number=buff-48;

           while((buff=getchar())>47 && buff<58)

               number=10*number+buff-48;

           i=0;

           while(number)

           {

               hexa=number%16;

               if(hexa>9)

                   hexa[i++]+=55;

               else

                   hexa[i++]+=48;

               number/=16;

           }

           putchar(48);

           putchar(120);

           while(i)

           {

               putchar(hexa[--i]);

           }

           putchar(10);

       }

   }

}

Salut!

Je viens d'essayé ce programme mais je ne comprend pas car il ne fait que convertir le decimal en hexa et pas l'inverse!

Ton nombre décimal doit commencer par 0x (le nombre 0, pas la lettre O)

exemple d'entree :

0x54AE

84313

0xB55

sinon tu peut tester (j'ai pas encore compilé):

#include<stdio.h>

int main()

{

char buff;

long num;

while(1)

{

 buff=getchar();

 getchar();

 if(buff=='h' || buff=='H')

 {

  scanf("%X",&num);

  getchar();

  printf("%ldn",num);

 }

 else

 {

  scanf("%ld",&num);

  getchar();

  printf("%Xn",num);

 }

}

return 0;

}

d pour décimal ->hexadecimal

h pour hexadécimal ->décimal

exemple d'entree :

d

16513

h

0ab54d

etc..

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...