- C++ Programming Examples
- C++ Programming Examples
- C++ Hello World
- C++ Get Input
- C++ Print Integer
- C++ Add Two Numbers
- C++ Add Sub Mul Div
- C++ Add Digits
- C++ Find Average Perc
- C++ Find Arithmetic Mean
- C++ Sum of n Natural Numbers
- C++ Sum of n Numbers
- C++ Area Perimeter of Square
- C++ Area Perimeter of Rectangle
- C++ Area Perimeter of Triangle
- C++ Area Circum of Circle
- C++ Find Simple Interest
- C++ Fahrenheit to Celsius
- C++ Celsius to Fahrenheit
- C++ Print Prime Numbers
- C++ Reverse a Number
- C++ Swap Two Numbers
- C++ Print Multiplication Table
- C++ Find Factorial of Number
- C++ Find Factors of Number
- C++ Find HCF & LCM
- C++ Make Calculator
- C++ Count Digits in Number
- C++ Sum of First & Last Digit
- C++ Product of Digits of Number
- C++ Sum of Squares of Digits
- C++ Interchange Digits of Number
- C++ if else Programs
- C++ Check Even or Odd
- C++ Check Prime or Not
- C++ Check Alphabet or Not
- C++ Check Vowel or Not
- C++ Check Leap Year or Not
- Check Reverse equal Original
- C++ Check Perfect Number
- C++ Check Palindrome or Not
- C++ Check Armstrong or Not
- C++ Divisibility Test
- C++ Find Wage of Labor
- C++ Find Discounted Price
- C++ Find Shipping Charge
- C++ Find Telephone Bills
- C++ Calculate Student Grade
- C++ Largest of Two Numbers
- C++ Largest of Three Numbers
- C++ Number Conversion
- C++ Decimal to Binary
- C++ Decimal to Octal
- C++ Decimal to Hexadecimal
- C++ Binary to Decimal
- C++ Binary to Octal
- C++ Binary to Hexadecimal
- C++ Octal to Decimal
- C++ Octal to Binary
- C++ Octal to Hexadecimal
- C++ Hexadecimal to Decimal
- C++ Hexadecimal to Binary
- C++ Hexadecimal to Octal
- C++ Pattern Programs
- C++ Pattern Programs
- C++ Print Diamond Pattern
- C++ Print Floyd's Triangle
- C++ Print Pascal's Triangle
- C++ Array Programs
- C++ 1D Array Program
- C++ Linear Search
- C++ Binary Search
- Find Largest Element in Array
- Find Smallest Element in Array
- Find Second Largest Element
- Find Second Smallest Element
- C++ Sum of All Elements
- C++ Multiply All Elements
- C++ Element on Even Position
- C++ Element on Odd Position
- C++ Print Even Numbers in Array
- C++ Print Odd Numbers in Array
- C++ Count Even/Odd Numbers
- C++ Sum of Even/Odd Numbers
- C++ Count Positive Negative Zero
- C++ Reverse an Array
- C++ Insert Element in Array
- C++ Delete Element from Array
- C++ Merge two Arrays
- C++ Bubble Sort
- C++ Selection Sort
- C++ Insertion Sort
- C++ Common Elements
- C++ 2D Array Programs
- C++ Add Two Matrices
- C++ Subtract Two Matrices
- C++ Transpose Matrix
- C++ Multiply Two Matrices
- C++ 3D Array Programs
- C++ String Programs
- C++ Print String
- C++ Find Length of String
- C++ Compare Two Strings
- C++ Copy String
- C++ Concatenate String
- C++ Reverse a String
- C++ Delete Vowels from String
- C++ Delete Word from String
- C++ Count Character in String
- C++ Count Word in String
- C++ Frequency of Word
- C++ Remove Spaces from String
- C++ Sort a String
- C++ Uppercase to Lowercase
- C++ Lowercase to Uppercase
- C++ Swap Two Strings
- C++ Check Anagram or Not
- C++ Capitalize All Words in String
- C++ Capitalize Specific Character
- C++ Get Numbers from String
- C++ File Programs
- C++ Read a File
- C++ Write Content to File
- C++ Append Data in File
- C++ Read & Display File
- C++ Copy a File
- C++ Merge Two Files
- Count Characters, Words in File
- C++ Capitalize All Words in File
- C++ List Files in Directory
- C++ Delete a File
- C++ Encrypt & Decrypt a File
- C++ Misc Programs
- C++ Print ASCII Value
- C++ Add Binary Numbers
- C++ Generate Random Numbers
- C++ Print Smiling Face
- C++ Days into Years, Months
- Add Two Numbers using Pointer
- C++ Print Fibonacci Series
- Generate Armstrong Numbers
- C++ Find nCr and nPr
- C++ Get IP Address
- C++ Print Date/Time
- C++ Shutdown, Restart Computer
- C++ Programming Tutorial
- C++ Tutorial
- C++ Programming Test
- C++ Programming Test
- Give Online Test
- All Test List
C++ Program to Convert Hexadecimal to Decimal
In this article, you will learn and get code on hexadecimal to decimal conversion in C++. Here are the list of programs, you will go through:
- Hexadecimal (without fractional part) to Decimal Conversion
- Hexadecimal (with fractional part or with decimal point) to Decimal Conversion
- Hexadecimal to Decimal Conversion using Function and Pointer
Before going through these programs, if you're not aware about some simple steps and formula used for the conversion, then you can refer to hexadecimal to decimal to get every required things.
Hexadecimal to Decimal in C++
To convert a number from hexadecimal to decimal in C++ programming, you have to ask from user to enter the hexadecimal number first. And then convert it into its equivalent decimal value. as shown in the program given below.
The question is, write a program in C++ that converts hexadecimal number to decimal number. Here is its answer:
#include<iostream> #include<math.h> using namespace std; int main() { int decimalNum=0, rem, i=0, len=0; char hexDecNum[20]; cout<<"Enter the Hexadecimal Number: "; cin>>hexDecNum; while(hexDecNum[i]!='\0') { len++; i++; } len--; i=0; while(len>=0) { rem = hexDecNum[len]; if(rem>=48 && rem<=57) rem = rem-48; else if(rem>=65 && rem<=70) rem = rem-55; else if(rem>=97 && rem<=102) rem = rem-87; else { cout<<"\nInvalid Hex Digit!"; cout<<endl; return 0; } decimalNum = decimalNum + (rem*pow(16, i)); len--; i++; } cout<<"\nEquivalent Decimal Value: "<<decimalNum; cout<<endl; return 0; }
This program was build and run under Code::Blocks IDE. Here is its sample run:
Now supply any hexadecimal number input say 1D7F and press ENTER
key to convert and prints
its equivalent decimal value as shown in the snapshot given below:
Program doesn't cares about the case of alphabet A-F (hex characters corresponds to hex digits 10 to 15). That is, either entered in lowercase or in uppercase as shown in the output given below:
The dry run of above program with hexadecimal number input 1D7F goes like:
- Initial values, decimalNum=0, i=0, len=0
- When user enters hexadecimal number say 1D7F, then it gets stored in hexDecNum, in a way that:
- hexDecNum[0]=1
- hexDecNum[1]=D
- hexDecNum[2]=7
- hexDecNum[3]=F
- and a null terminated character \0 gets assigned to fourth index. That is, hexDecNum[4]=\0
- Now using while loop, the length of hexDecNum[] gets calculated. That is, how many characters
entered as hexadecimal input. The while loop evaluates in this way:
- The condition hexDecNum[i]!='\0' or hexDecNum[0]!='\0' or 1!='\0' evaluates to be true, therefore program flow goes inside the loop, and increments the value of both variables say len and i. So, i=1 and len=1
- Program flow goes back and evaluates the condition again. That is, the condition hexDecNum[i]!='\0' or hexDecNum[1]!='\0' or D!='\0' evaluates to be true again, therefore program flow again goes inside the loop and increments the value of both variables
- Evaluation of while loop continues, until the condition evaluates to be false. That is, when the value of i becomes equal to 4. The conditionn evaluates to be false, because there is no any character available at that index (fourth index). Therefore it gets matched with a null terminated character (\0)
- Now the value of len gets decremented. So len=3 and i=0
- The condition of second while loop gets evaluated
- That is, the condition len>=0 or 3>=0 evaluates to be true, therefore program flow goes inside the loop
- There, hexDecNum[len] or hexDecNum[3] or F gets initialized to rem
- Because, rem is of int (integer) type, therefore the ASCII value of F gets initialized to rem. So rem=70
- Now using if-else, we've compared the value of rem (with ASCII values of 0-9, A-F and a-f) and processed the statement accordingly.
- That is, because rem (70) is neither greater than or equal to 48 nor less than or equal to 57. Therefore the first else if's condition gets evaluated. That is, the condition rem<=70 or 70<=70 evaluates to be true, therefore rem-55 or 70-55 or 15 gets initialized to rem. 15 corresponds to F
- Now decimalNum + (rem*pow(16, i)) or 0 + (15*pow(16, 0)) or 15*160 or 15*1 or 15 gets initialized to decimalNum
- The value of len gets decremented. So len=2
- And the value of i gets incremented. So i=1
- Now program flow goes back and the condition of while loop gets evaluated
- That is, the condition, len>=0 or 2>=0 again evaluates to be true, therefore program flow again goes inside the loop, and process the code in similar way as told above
- Continue the process in similar way until the condition evaluates to be false.
- On continuing the process, we'll get the values in this way:
- rem=70, rem=15, decimalNum=15, len=2, i=1
- rem=55, rem=7, decimalNum=127, len=1, i=2
- rem=68, rem=13, decimalNum=3455, len=0, i=3
- rem49, rem=1, decimalNum=7551, len=(-1), i=4)
- Because, the value of len is now less than 0, therefore the condition evaluates to be false, and the evaluation of while loop gets ended
- Print the value of decimalNum as output. That is, 7551
You can also compare and process directly with the character of hexDecNum[] one by one. To do this, replace the following block of code:
if(rem>=48 && rem<=57) rem = rem-48; else if(rem>=65 && rem<=70) rem = rem-55; else if(rem>=97 && rem<=102)
with the block of code given below:
if(rem>='0' && rem<='9') rem = rem-48; else if(rem>='A' && rem<='F') rem = rem-55; else if(rem>='a' && rem<='f')
Without using pow() Function
If you don't want to use pow() function of math.h header file, then you can replace the following statement:
decimalNum = decimalNum + (rem*pow(16, i));
with
k=1;
mul=1;
while(k<=i)
{
mul=16*mul;
k++;
}
decimalNum = decimalNum + (rem*mul);
Note - Don't forgot to declare both new variables k and mul at start of the program. And remove the header file, math.h. Rest of the things will be same.
What if Hexadecimal Number contains Fractional Part ?
To deal with a type of input that contains fractional part. That is a hexadecimal number containing fractional part (or decimal point), use the following program:
#include<iostream> #include<math.h> using namespace std; int main() { int decimalNum=0, decNumOne=0, dotPosition=0; int rem, i=0, len=0, lenTemp; float decNumTwo=0; char hexDecNum[20]; cout<<"Enter the Hexadecimal Number: "; cin>>hexDecNum; while(hexDecNum[i]!='\0') { if(hexDecNum[i]=='.') dotPosition = i; len++; i++; } len--; i=0; if(dotPosition==0) { while(len>=0) { rem = hexDecNum[len]; if(rem>=48 && rem<=57) rem = rem-48; else if(rem>=65 && rem<=70) rem = rem-55; else if(rem>=97 && rem<=102) rem = rem-87; else { cout<<"\nInvalid Hex Digit!"; cout<<endl; return 0; } decimalNum = decimalNum + (rem*pow(16, i)); len--; i++; } cout<<"\nEquivalent Decimal Value: "<<decimalNum; } else { lenTemp = dotPosition-1; while(lenTemp>=0) { rem = hexDecNum[lenTemp]; if(rem>=48 && rem<=57) rem = rem-48; else if(rem>=65 && rem<=70) rem = rem-55; else if(rem>=97 && rem<=102) rem = rem-87; else { cout<<"\nInvalid Hex Digit!"; cout<<endl; return 0; } decNumOne = decNumOne + (rem*pow(16, i)); lenTemp--; i++; } lenTemp = dotPosition+1; i=-1; while(lenTemp<=len) { rem = hexDecNum[lenTemp]; if(rem>=48 && rem<=57) rem = rem-48; else if(rem>=65 && rem<=70) rem = rem-55; else if(rem>=97 && rem<=102) rem = rem-87; else { cout<<"\nInvalid Hex Digit!"; cout<<endl; return 0; } decNumTwo = decNumTwo + (rem*pow(16, i)); lenTemp++; i--; } decNumTwo = decNumOne+decNumTwo; cout<<"\nEquivalent Decimal Value: "<<decNumTwo; } cout<<endl; return 0; }
Here is its sample run with hexadecimal number input as 5A9.63
The variable dotPosition is used here, that checks whether decimal point is available in the hexadecimal input or not. If hexadecimal input contains fractional part (or has decimal point), then 1 gets initialized to dotPosition variable. Checks later, whether its value is equal to 0 or not. If it is equal to 0 (means 1 does not gets initialized to it), then process the normal conversion, otherwise deal with different rules as shown in above program.
That is, if a hexadecimal number contains fractional part (or decimal point), then we've used two part. One before decimal and one after decimal.
The part that is available before decimal, gets converted into its equivalent decimal value and initialized to decNumOne. Whereas the part that is available after decimal, gets converted into its equivalent decimal value and initialized to decNumTwo (float type variable). Finally add and print the value.
Note - The rules to convert hexadecimal (after decimal point) to decimal is already discussed in the article of Hexadecimal (with Fractional) to Decimal.
Using Function and Pointer
This program uses function and pointer to convert hexadecimal to decimal in C++.
#include<iostream> #include<math.h> using namespace std; unsigned long HexDecToDec(char []); int main() { unsigned long decimalNum; char hexDecNum[10]; cout<<"Enter the Hexadecimal Number: "; cin>>hexDecNum; decimalNum = HexDecToDec(hexDecNum); if(decimalNum==0) cout<<"\nInvalid Hex Digit!"; else cout<<"\nEquivalent Decimal Value: "<<decimalNum; cout<<endl; return 0; } unsigned long HexDecToDec(char hexDecNum[]) { char *hexDecPointer; int i, len = 0; const int base = 16; unsigned long decimalNum = 0; // Find the len of Hexadecimal Number for(hexDecPointer=hexDecNum; *hexDecPointer != '\0'; hexDecPointer++) len++; // Again initialize the starting address of Hexadecimal Number hexDecPointer = hexDecNum; // Now convert hex digit to decimal number one by one for(i=0; *hexDecPointer != '\0' || i<len; i++, hexDecPointer++) { if(*hexDecPointer>=48 && *hexDecPointer<=57) decimalNum = decimalNum + (*hexDecPointer - 48)*pow(base, len-i-1); else if(*hexDecPointer>=65 && *hexDecPointer<=70) decimalNum = decimalNum + (*hexDecPointer - 55)*pow(base, len-i-1); else if(*hexDecPointer>=97 && *hexDecPointer<=102) decimalNum = decimalNum + (*hexDecPointer - 87)*pow(base, len-i-1); else len=0; } if(len==0) return 0; else return decimalNum; }
Note - This program doesn't work with hexadecimal input containing fractional (decimal) part.
To create the program using user-defined function that converts hexadecimal (with fractional part) to its equivalent decimal value. Then you can use the program that I've already mentioned above to deal with this type of input. Just alter it and create with yourself.
Same Program in Other Languages
- C Hexadecimal to Decimal Conversion
- Java Hexadecimal to Decimal Conversion
- Python Hexadecimal to Decimal Conversion
« Previous Program Next Program »