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.