web-dev-qa-db-fra.com

Conversion d'un nombre décimal en un nombre hexadécimal

Pourquoi utilisons-nous + 55 pour convertir décimal en hexadécimal? dans ce code, nous utilisons +48 pour convertir un entier en caractère. quand temp <10. Mais lorsque temp> = 10, nous utilisons +55. qu'est-ce que cela signifie par +55?

#include<stdio.h>
int main(){
    long int decimalNumber,remainder,quotient;
    int i=1,j,temp;
    char hexadecimalNumber[100];

    printf("Enter any decimal number: ");
    scanf("%ld",&decimalNumber);

    quotient = decimalNumber;

    while(quotient!=0){
         temp = quotient % 16;

      //To convert integer into character
      if( temp < 10)
           temp =temp + 48;
      else
         temp = temp + 55;

      hexadecimalNumber[i++]= temp;
      quotient = quotient / 16;
  }

    printf("Equivalent hexadecimal value of decimal number %d: ",decimalNumber);
    for(j = i -1 ;j> 0;j--)
      printf("%c",hexadecimalNumber[j]);

    return 0;
}
4
MD MAHBUB ALAM

Dans un environnement ASCII, 55 est égal à 'A' - 10. Cela signifie que l'ajout de 55 équivaut à soustraire 10 et à ajouter 'A'.

En ASCII, les valeurs de 'A' à 'Z' sont adjacentes et séquentielles, de sorte que cela mappera 10 à 'A', 11 à 'B' et ainsi de suite. 

8
caf

Pour les valeurs de temp inférieures à 10, le code ASCII approprié est 48 + temp:

0 => 48 + 0 => '0'
1 => 48 + 1 => '1'
2 => 48 + 2 => '2'
3 => 48 + 3 => '3'
4 => 48 + 4 => '4'
5 => 48 + 5 => '5'
6 => 48 + 6 => '6'
7 => 48 + 7 => '7'
8 => 48 + 8 => '8'
9 => 48 + 9 => '9'

Pour les valeurs supérieures ou égales à 10, la lettre appropriée est 55 + temp:

10 => 55 + 10 => 'A'
11 => 55 + 11 => 'B'
12 => 55 + 12 => 'C'
13 => 55 + 13 => 'D'
14 => 55 + 14 => 'E'
15 => 55 + 15 => 'F'
5
John

En raison du codage ASCII des caractères en C. Lorsque le reste (temp) est inférieur à dix, le chiffre de l'hexadécimal est également compris entre 0 et 9. Les caractères "0" à "9 sont dans la plage ASCII de 48 à 57. 

Lorsque le reste est supérieur à 10 (et toujours inférieur à 15, en raison de l'opération restante %), le chiffre hexadécimal est dans la plage de A à F, ce qui, dans ASCII, est dans la plage de 65 à 70. Donc, temp + 55 est un nombre compris entre 65 et 70 et donne donc un caractère compris entre «A» et «F».

Il est plus courant d'utiliser une chaîne char[] digits = "0123456789ABCDEF"; et d'utiliser le reste en tant qu'index dans cette chaîne. La méthode dans votre question (probablement) fonctionne aussi bien.

4
Kninnug

Un nombre hexadécimal est un nombre représenté par 16 symboles, chiffres 0 à 9 et alphabets A - F. La procédure à suivre pour écrire un programme c afin de convertir un nombre décimal en hexadécimal est la suivante: Divisez le nombre décimal par 16 à chaque étape et prenez le reste.

Ici, pour les restes, on utilise 0 à 9 chiffres et on utilise ensuite les alphabets A, B, C, D, E, F pour représenter 10 à 15 chiffres. Maintenant, combinez tous les restes en série de bas en haut, c'est-à-dire A C'est le nombre hexadécimal de 10 (décimal)

par exemple, convertir le nombre décimal 10 en hexadécimal

16 | 10 | 0 - un

Maintenant, combinez tous les restes en série de bas en haut, c'est-à-dire A. C'est le nombre hexadécimal de 10 (décimal)

Logique du programme: Entrez le nombre décimal n, divisez n par 16 (depuis l'hexadécimal) et enregistrez le reste dans le tableau et le quotient dans une répétition n jusqu'à ce que n soit supérieur à zéro.

voir le programme à l'adresse suivante: http://www.programmingsimplysolved.com/c-programs/c-program-to-convert-decimal-number-to-hexadecimal-using-functions/

contribué par: www.programmingsimplysolved.com