The hexadecimal numbers are base 16 numbers that use 16 symbols {0, 1, 2, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} to represent all digits. Here, (A, B, C, D, E, F) represents (10, 11, 12, 13, 14, 15). Decimal numbers are base 10 numbers with 10 symbols to represent all digits.
In this article, we will learn to write a program in C++ to convert the hexadecimal number into an equivalent decimal number.
Algorithm
- Initialize a variable dec_value with 0 to store the decimal value.
- Traverse the hexadecimal string from right to left and check,
- If the current character is a number 0-9, convert it to its corresponding integer by subtracting ‘0’ from its ASCII value.
- If the character is a letter from ‘A’ to ‘F’, convert it to its corresponding integer by subtracting ‘A’ from its ASCII value and adding 10 to it.
- Multiply each digit of the hexadecimal number with the proper base (Power of 16) and add it to the variable dec_value.
- Update the base value in each iteration by multiplying it by 16.
- After traversing all the digits of the hexadecimal number, the variable dec_value will store the equivalent decimal number.
The below diagram explains how to convert a hexadecimal number (1AB) to an equivalent decimal value:
C++ Program to Convert Hexadecimal Number to Decimal Number
// C++ program to convert hexadecimal // to decimal #include <bits/stdc++.h> using namespace std;
// Function to convert hexadecimal // to decimal int hexadecimalToDecimal(string hexVal)
{ int len = hexVal.size();
// Initializing base value to 1,
// i.e 16^0
int base = 1;
int dec_val = 0;
// Extracting characters as digits
// from last character
for ( int i = len - 1; i >= 0; i--) {
// If character lies in '0'-'9',
// converting it to integral 0-9
// by subtracting 48 from ASCII value
if (hexVal[i] >= '0' && hexVal[i] <= '9' ) {
dec_val += ( int (hexVal[i]) - 48) * base;
// incrementing base by power
base = base * 16;
}
// If character lies in 'A'-'F' , converting
// it to integral 10 - 15 by subtracting 55
// from ASCII value
else if (hexVal[i] >= 'A' && hexVal[i] <= 'F' ) {
dec_val += ( int (hexVal[i]) - 55) * base;
// Incrementing base by power
base = base * 16;
}
}
return dec_val;
} // Driver code int main()
{ string hexNum = "1A" ;
cout << (hexadecimalToDecimal(hexNum));
return 0;
} |
26
Complexity Analysis
- Time complexity: O(len), where len is the length of the string
- Auxiliary space: O(len)
Please refer complete article on Program for Hexadecimal to Decimal for more details!