In this blog post, we will see the C program to convert Decimal to Hexadecimal. In the interview, people ask the below questions,
- How will you convert decimal to hexadecimal value?
- Write a C program to convert decimal number system value to hexadecimal number system?
- Implement logic to convert a decimal number to a hexadecimal number system?
- Get a decimal number from the user and convert it to its hexadecimal equivalent?
- How do you convert the number with base value 10 to base value 16?
Before writing the code let’s understand what hexadecimal and decimal are.
The hexadecimal number system is a base 16 number system. The hexadecimal number is represented by 16 values i.e 0 1 2 3 4 5 6 7 8 9 A B C D E F.
The decimal number system is a base 10 number system. It uses 10 symbols to represent all numbers i.e. 0123456789
Conversion steps from decimal to hex:
- Divide the number by 16.
- Get the integer quotient for the next iteration.
- Get the remainder for the hex digit.
- Repeat the steps until the quotient is equal to 0.
Example,
Convert 671110 to hex:
| Division by 16 |
Quotient (integer) |
Remainder (decimal) |
Remainder (hex) |
Digit # |
|---|---|---|---|---|
| 6711/16 | 419 | 7 | 7 | 0 |
| 419/16 | 26 | 3 | 3 | 1 |
| 26/16 | 1 | 10 | A | 2 |
| 1/16 | 0 | 1 | 1 | 3 |
Decimal to hexadecimal conversion table:
The following table shows 0-16 decimal numbers with the corresponding hexadecimal numbers.
| Decimalbase 10 | Hexbase 16 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | A |
| 11 | B |
| 12 | C |
| 13 | D |
| 14 | E |
| 15 | F |
| 16 | 10 |
C Program to convert a decimal number to a hexadecimal number:
The following are C programs to convert a decimal number to a hexadecimal number.
Method 1:
// C program to convert a decimal
//
#include <stdio.h>
// function to convert decimal to hexadecimal
void decToHex(int decNum)
{
// char array to store hexadecimal number
char hexaDeciNum[50];
// counter for hexadecimal number array
int i = 0;
while (decNum != 0)
{
/* temporary variable to
store right most digit*/
int temp = 0;
// Get the right most digit
temp = decNum % 16;
// check if temp < 10
if (temp < 10)
{
hexaDeciNum[i] = temp + 48;
i++;
}
else
{
hexaDeciNum[i] = temp + 55;
i++;
}
decNum = decNum / 16; // get the quotient
}
printf("0x"); //print hex symbol
// printing hexadecimal number array in reverse order
for (int j = i - 1; j >= 0; j--)
{
printf("%c", hexaDeciNum[j]);
}
}
int main()
{
int decNum;
printf("Enter a decimal number: ");
scanf("%d", &decNum);
decToHex(decNum);
return 0;
}
Output:

How it works:
Step 1: Calculate remainder when 6711 is divided by 16 is 7. Therefore, temp = 7. As temp is less than 10. So, hexaDeciNum[0] = 48 + 7= 55 = ‘7’.
Step 2: Divide 6711 by 16. New number is 6711/16 = 419.
Step 3: Calculate remainder when 419 is divided by 16 is 3. Therefore, temp = 3. As temp is less than 10. So, hexaDeciNum[0] = 48 + 3= 51= ‘3’.
Step 4: Divide 419 by 16. New number is 419 /16 = 26.
Step 5: Calculate remainder when 26 is divided by 16 is 10. Therefore, temp = 10. As temp is greater than 10. So, hexaDeciNum[0] = 55 + 10= 65= ‘A’.
Step 6: Divide 26 by 16. New number is 26/16 = 1.
Step 7: Calculate remainder when 1 is divided by 16 is 1. Therefore, temp = 1. As temp is less than 10. So, hexaDeciNum[0] = 48 + 1= 49 = ‘1’.
Step 8: Divide 1 by 16. New number is 1/16 = 10.
Step 9: Now number becomes = 0, so iterating loops will break and print hexaDeciNum array reverse order.
Method-2:
The steps are the almost same as the above method. Here I have used the ternary operator in place of the if-else statement.
#include <stdio.h>
//function to convert decimal to hexadecimal
void decToHex(int decNum)
{
// char array to store hexadecimal number
char hexaDeciNum[50];
// counter for hexadecimal number array
int i = 0;
while (decNum != 0)
{
/* temporary variable to
store right most digit*/
int temp = decNum % 16;
// check if temp < 10
hexaDeciNum[i++] = temp + ((temp < 10) ? 48 :55);
decNum = decNum / 16; // get the quotient
}
printf("0x"); //print hex symbol
// printing hexadecimal number array in reverse order
for (int j = i - 1; j >= 0; j--)
{
printf("%c", hexaDeciNum[j]);
}
}
int main()
{
int decNum;
printf("Enter a decimal number: ");
scanf("%d", &decNum);
decToHex(decNum);
return 0;
}
Method-3:
Using the literal string you can also convert decimal to hex.
// C program to convert a decimal
#include <stdio.h>
// function to convert decimal to hexadecimal
void decToHex(int decNum)
{
// char array to store hexadecimal number
char hexaDeciNum[50];
int i = 0;
while (decNum != 0)
{
hexaDeciNum[i] = (char)(*("0123456789ABCDEF"
+ ((decNum % 16) & (15))));
decNum = (decNum / 16);
++i;
}
printf("0x"); //print hex symbol
// printing hexadecimal number array in reverse order
for (int j = i - 1; j >= 0; j--)
{
printf("%c", hexaDeciNum[j]);
}
}
int main()
{
int decNum;
printf("Enter a decimal number: ");
scanf("%d", &decNum);
decToHex(decNum);
return 0;
}
Recommended Post:
- C Programming Courses And Tutorials.
- CPP Programming Courses And Tutorials.
- Python Courses and Tutorials.
- C program to decimal to octal number
- Convert decimal to binary number
- C program to decimal to binary using recursion and without using power operator
- Program to decimal to binary number using recursion
- C program to convert decimal to binary without using arithmetic operators.