codescracker
c++

C++ Program to Convert Hexadecimal to Octal



« Previous Program Next Program »


In this article, you will learn and get code on hexadecimal to octal conversion in C++. The program is created with and without using function.

Before going through the program, if you're not aware about the simple steps and formula used for the conversion, then you can refer to hexadecimal to octal steps, formula to get every required things.

Hexadecimal to Octal in C++

To convert hexadecimal number to octal number in C++ programming, you have to ask from user to enter the hexadecimal number first. And then convert it into its equivalent octal value. Print its equivalent octal value as shown in the program given below:

// C++ Program to Convert Hexadecimal to Octal
// ----codescracker.com----

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
    int decimalNum=0, octalNum[30], rem, i=0, len=0;
    char hexDecNum[10];
    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++;
    }
    i=0;
    while(decimalNum != 0)
    {
        octalNum[i] = decimalNum%8;
        i++;
        decimalNum = decimalNum/8;
    }
    cout<<"\nEquivalent Octal Value: ";
    for(i=(i-1); i>=0; i--)
        cout<<octalNum[i];
    cout<<endl;
    return 0;
}

This program was build and run under Code::Blocks IDE. Here is its sample run:

C++ program convert hexadecimal to octal

Now supply the hexadecimal number input say 4CA and press ENTER key to convert and prints its equivalent octal value as shown in the output given below:

hexadecimal to octal c++

Here is another sample run with an invalid hexadecimal input say 4RT:

hex to oct c++

Note - There is no direct conversion from hexadecimal to octal. So you can either prefer hexadecimal to decimal, then decimal to octal or hexadecimal to binary, then binary to octal.

The above program first converts hexadecimal number to its decimal equivalent, and then decimal equivalent gets converted into its octal equivalent. Therefore indirectly, the hexadecimal number (entered by user) gets converted into its octal equivalent.

To learn about the working of above program like how the program works or how its dry run goes, then you can refer to its separate article.

Using user-defined Function

Let's modify the above program and create using a user-defined function HexDecToOct(). The function takes hexadecimal number as its argument, and returns 0, if an invalid hex (hexadecimal) character found, or returns its octal equivalent.

// HexaDecimal to Octal using User-defined Function
// ----codescracker.com----

#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
int HexDecToOct(char []);
int main()
{
    char hexDecNum[10], octNum;
    cout<<"Enter the Hexadecimal Number: ";
    cin>>hexDecNum;
    octNum = HexDecToOct(hexDecNum);
    if(octNum==0)
        cout<<"\nInvalid Hex Digit!";
    else
        cout<<"\nEquivalent Octal Value: "<<HexDecToOct(hexDecNum);
    cout<<endl;
    return 0;
}
int HexDecToOct(char hexDecNum[])
{
    int i, len=0, decNum=0, octNum=0;
    len = strlen(hexDecNum);
    len--;
    for(i=0; hexDecNum[i]!='\0'; i++, len--)
    {
        if(hexDecNum[i]>='0' && hexDecNum[i]<='9')
            decNum = decNum + (hexDecNum[i]-48)*pow(16,len);
        else if(hexDecNum[i]>='A' && hexDecNum[i]<='F')
            decNum = decNum + (hexDecNum[i]-55)*pow(16,len);
        else if(hexDecNum[i]>='a' && hexDecNum[i]<='f')
            decNum = decNum + (hexDecNum[i]-87)*pow(16,len);
        else
            return 0;
    }
    i=1;
    while(decNum!=0)
    {
        octNum = octNum + (decNum%8)*i;
        i = i*10;
        decNum = decNum/8;
    }
    return octNum;
}

This program produces the same output as of previous program.

Same Program in Other Languages


« Previous Program Next Program »