C++ program to convert a hexadecimal value to binary:
In this post, we will learn how to convert a hexadecimal value to binary in C++. The program will take a hexadecimal value as input from the user, convert it to binary and print that.
Hexadecimal and binary number system:
Hexadecimal and binary, both are different number systems. The hexadecimal number system uses 16 as the base. For decimal numbers 0 to 9, hexadecimal uses 0 to 9. For 10 to 15, it uses A to F. We can also use a to f. We have to use letters because we need to represent all two digit numbers using one character.
The binary number system uses 2 as base. So, all numbers are represented in 0 and 1 in the binary system.
Algorithm:
We will use the below algorithm to convert a hexadecimal value to binary:
- Get the hexadecimal value as an input from the user.
- For each character of the hexadecimal value, convert it to binary.
- Join all binary values to get the final binary result.
For example, if we want to convert 2A9B to binary,
- Binary equivalent of 2 is 0010
- Binary equivalent of A is 1010
- Binary equivalent of 9 is 1001
- Binary equivalent of B is 1011
So, the binary of 2A9B is 0010101010011011.
- The program will iterate through the characters of the hexadecimal string one by one.
- It will initialize a result string as an empty string to hold the final binary conversion.
- It will use a loop to iterate through the characters of the string one by one. For each character, it will find the binary equivalent and add it to the result string.
C++ program:
Below is the complete C++ program:
#include <iostream>
#include <string>
using namespace std;
string getBinary(char c)
{
switch (c)
{
case '0':
return "0000";
case '1':
return "0001";
case '2':
return "0010";
case '3':
return "0011";
case '4':
return "0100";
case '5':
return "0101";
case '6':
return "0110";
case '7':
return "0111";
case '8':
return "1000";
case '9':
return "1001";
case 'A':
case 'a':
return "1010";
case 'B':
case 'b':
return "1011";
case 'C':
case 'c':
return "1100";
case 'D':
case 'd':
return "1101";
case 'E':
case 'e':
return "1110";
case 'F':
case 'f':
return "1111";
default:
return "-1";
}
}
int main()
{
string hexString;
string binaryString = "";
cout << "Enter the hexadecimal string: " << endl;
cin >> hexString;
for (int i = 0; i < hexString.length(); i++)
{
binaryString += getBinary(hexString[i]);
}
cout << "Binary: " << binaryString << endl;
return 0;
}
Here,
- getBinary is a method to get the binary string for a given character. It takes a character as its parameter and returns the binary equivalent.
- It uses a switch-case block. We have defined the binary equivalent of all possible hexadecimal characters.
- hexString variable is initialized to hold the hexadecimal string and binaryString is to hold the final binary string. binaryString is initialized as an empty string.
- It asks the user to enter the hexadecimal string and reads the string to the hexString variable.
- The for loop iterates through the characters of the hexadecimal string one by one.
- For each character, it finds the binary equivalent by calling the getBinary method.
- It appends the binary string to the end of binaryString.
- At the end of the program, it prints the binary string binaryString to the user.
If you run this program, it will give output as like below:
Enter the hexadecimal string:
2a9b
Binary: 0010101010011011
It will work for all valid hexadecimal strings. But, it will not show any error message for invalid strings. For example,
Enter the hexadecimal string:
2ty
Binary: 0010-1-1
This is because, the getBinary method returns -1 for invalid hexadecimal characters and we don’t have any checks for invalid characters.
Method 2: Handle invalid hexadecimal inputs:
Let’s change the above method a little bit to handle invalid hexadecimal inputs:
#include <iostream>
#include <string>
using namespace std;
string getBinary(char c)
{
switch (c)
{
case '0':
return "0000";
case '1':
return "0001";
case '2':
return "0010";
case '3':
return "0011";
case '4':
return "0100";
case '5':
return "0101";
case '6':
return "0110";
case '7':
return "0111";
case '8':
return "1000";
case '9':
return "1001";
case 'A':
case 'a':
return "1010";
case 'B':
case 'b':
return "1011";
case 'C':
case 'c':
return "1100";
case 'D':
case 'd':
return "1101";
case 'E':
case 'e':
return "1110";
case 'F':
case 'f':
return "1111";
default:
return "-1";
}
}
int main()
{
string hexString;
string binaryString = "";
bool isValid = true;
string binary;
cout << "Enter the hexadecimal string: " << endl;
cin >> hexString;
for (int i = 0; i < hexString.length(); i++)
{
binary = getBinary(hexString[i]);
if (binary == "-1")
{
isValid = false;
break;
}
binaryString += binary;
}
if (isValid)
{
cout << "Binary: " << binaryString << endl;
}
else
{
cout << "Invalid hexadecimal input" << endl;
}
return 0;
}
Following are the changes I did for this program:
- One boolean value isValid is initialized as true. This variable defines if the input is a valid input or not.
- Another string variable binary is initialized to hold the binary value for a hexadecimal character.
- Inside the for loop, the return value of getBinary is stored in the binary variable first before appending to binaryString. If the value of binary is -1, i.e. if any character in the hexadecimal string is invalid, it assigns false to isValid and exits from the loop.
- After the for loop is completed, it checks the value of isValid and prints a message based on that.
It will give outputs as like below:
Enter the hexadecimal string:
2ae7
Binary: 0010101011100111
Enter the hexadecimal string:
uj9
Invalid hexadecimal input
You might also like:
- C++ program to print a right-angled number Pyramid
- C++ program to print right-angled right-oriented pyramid of numbers
- 4 ways in C++ to concatenate two strings
- C++ program to create multiple objects of a class
- delete vs free in C++
- C++ program to calculate discounted price
- C++ isdigit() function explanation with example