Program to Convert Hexadecimal to Octal

27 Jun, 2022
Given a Hexadecimal number, the task is to convert it into an Octal number.Examples: 
Input: Hexadecimal = 1AC
Output: Binary = 0654
Explanation:
    Equivalent binary value of 1: 0001
    Equivalent binary value of A: 1010
    Equivalent binary value of C: 1100

    Grouping in terms of 3: 000 110 101 100

    Equivalent octal value of 000: 0
    Equivalent octal value of 110: 6
    Equivalent octal value of 101: 5
    Equivalent octal value of 100: 4

Input: Hexadecimal = 5D1F
Output: Octal = 56437
Approach: A hexadecimal number is a positional numeral system with a radix, or base, of 16 and uses sixteen distinct symbols.An octal number or oct for short is the base-8 number and uses the digits 0 to 7. Octal numerals can be made from binary numerals by grouping consecutive binary digits into groups of three (starting from the right) when it is before the radix point and if the binary digits are after the radix point then start from the left.
Hexadecimal to Octal Conversion
Steps of Conversion 
Find the equivalent binary number for each digit of the given hexadecimal number. Add 0’s to the left if any of the binary equivalents is shorter than 4 bits.Separate the binary digits into groups, each containing 3 bits or digits from right to left. Add 0s to the left, if the last group contains less than 3 bits.Find the octal equivalent for each binary group.
Find the equivalent binary number for each digit of the given hexadecimal number. Add 0’s to the left if any of the binary equivalents is shorter than 4 bits.
Separate the binary digits into groups, each containing 3 bits or digits from right to left. Add 0s to the left, if the last group contains less than 3 bits.
Find the octal equivalent for each binary group.
Below is the implementation of the above approach: 
C++
C
Java
Python
C#
Javascript
// C++ program to convert// Hexadecimal to Octal #include <bits/stdc++.h>using namespace std;  // Function to convert HexaDecimal to Binarylong long int hex_to_bin(char hex[]){    long long int bin, place;    int i = 0, rem, val;     bin = 0ll;    place = 0ll;     // Hexadecimal to binary conversion    for (i = 0; hex[i] != '\0'; i++) {        bin = bin * place;         switch (hex[i]) {        case '0':            bin += 0;            break;        case '1':            bin += 1;            break;        case '2':            bin += 10;            break;        case '3':            bin += 11;            break;        case '4':            bin += 100;            break;        case '5':            bin += 101;            break;        case '6':            bin += 110;            break;        case '7':            bin += 111;            break;        case '8':            bin += 1000;            break;        case '9':            bin += 1001;            break;        case 'a':        case 'A':            bin += 1010;            break;        case 'b':        case 'B':            bin += 1011;            break;        case 'c':        case 'C':            bin += 1100;            break;        case 'd':        case 'D':            bin += 1101;            break;        case 'e':        case 'E':            bin += 1110;            break;        case 'f':        case 'F':            bin += 1111;            break;        default:            cout << "Invalid hexadecimal input.";        }         place = 10000;    }     return bin;} // Function to convert Binary to Octallong long int bin_to_oct(long long bin){    long long int octal, place;    int i = 0, rem, val;     octal = 0ll;    place = 0ll;     place = 1;     // Binary to octal conversion    while (bin > 0) {        rem = bin % 1000;         switch (rem) {        case 0:            val = 0;            break;        case 1:            val = 1;            break;        case 10:            val = 2;            break;        case 11:            val = 3;            break;        case 100:            val = 4;            break;        case 101:            val = 5;            break;        case 110:            val = 6;            break;        case 111:            val = 7;            break;        }         octal = (val * place) + octal;        bin /= 1000;         place *= 10;    }     return octal;} // Function to Convert// Hexadecimal Number to Octal Numberlong long int hex_to_oct(char hex[]){    long long int octal, bin;     // convert HexaDecimal to Binary    bin = hex_to_bin(hex);     // convert Binary to Octal    octal = bin_to_oct(bin);     return octal;} // driver codeint main(){ // Get the hexadecimal number    char hex[20] = "1AC"; // convert hexadecimal to octal    cout << "Equivalent Octal Value = " << hex_to_oct(hex);     return 0;} //This code is contributed by shubhamsingh10
// C program to convert// Hexadecimal to Octal #include <math.h>#include <stdio.h>#include <string.h> // Function to convert HexaDecimal to Binarylong long int hex_to_bin(char hex[]){    long long int bin, place;    int i = 0, rem, val;     bin = 0ll;    place = 0ll;     // Hexadecimal to binary conversion    for (i = 0; hex[i] != '\0'; i++) {        bin = bin * place;         switch (hex[i]) {        case '0':            bin += 0;            break;        case '1':            bin += 1;            break;        case '2':            bin += 10;            break;        case '3':            bin += 11;            break;        case '4':            bin += 100;            break;        case '5':            bin += 101;            break;        case '6':            bin += 110;            break;        case '7':            bin += 111;            break;        case '8':            bin += 1000;            break;        case '9':            bin += 1001;            break;        case 'a':        case 'A':            bin += 1010;            break;        case 'b':        case 'B':            bin += 1011;            break;        case 'c':        case 'C':            bin += 1100;            break;        case 'd':        case 'D':            bin += 1101;            break;        case 'e':        case 'E':            bin += 1110;            break;        case 'f':        case 'F':            bin += 1111;            break;        default:            printf("Invalid hexadecimal input.");        }         place = 10000;    }     return bin;} // Function to convert Binary to Octallong long int bin_to_oct(long long bin){    long long int octal, place;    int i = 0, rem, val;     octal = 0ll;    place = 0ll;     place = 1;     // Binary to octal conversion    while (bin > 0) {        rem = bin % 1000;         switch (rem) {        case 0:            val = 0;            break;        case 1:            val = 1;            break;        case 10:            val = 2;            break;        case 11:            val = 3;            break;        case 100:            val = 4;            break;        case 101:            val = 5;            break;        case 110:            val = 6;            break;        case 111:            val = 7;            break;        }         octal = (val * place) + octal;        bin /= 1000;         place *= 10;    }     return octal;} // Function to Convert// Hexadecimal Number to Octal Numberlong long int hex_to_oct(char hex[]){    long long int octal, bin;     // convert HexaDecimal to Binary    bin = hex_to_bin(hex);     // convert Binary to Octal    octal = bin_to_oct(bin);     return octal;} // driver codeint main(){ // Get the hexadecimal number    char hex[20] = "1AC"; // convert hexadecimal to octal    printf("Equivalent Octal Value = %lld", hex_to_oct(hex));     return 0;}
// Java program to convert// Hexadecimal to Octalclass hex_to_oct{// declaring main method.public static void main(String[] args){    int dec = 0;         // taking 1AC as an example of hexadecimal Number.    String hexa = "1AC";    int c = hexa.length() - 1;         // finding the decimal equivalent of the    // hexa decimal number    for(int i = 0; i < hexa.length() ; i ++ )    {        //extracting each character from the string.        char ch = hexa.charAt(i);        switch (ch)        {            case '0':            case '1':            case '2':            case '3':            case '4':            case '5':            case '6':            case '7':            case '8':            case '9':                dec = dec + Integer.parseInt(Character.toString(ch))*                                                (int)Math.pow(16,c);                c--;                break;            case 'a':            case 'A':                dec = dec + 10 * (int)Math.pow(16, c);                c--;                break;            case 'b':            case 'B':                dec = dec + 11 * (int)Math.pow(16, c);                c--;                break;            case 'c':            case 'C':                dec = dec + 12 * (int)Math.pow(16, c);                c--;                break;            case 'd':            case 'D':                dec = dec + 13 * (int)Math.pow(16, c);                c--;                break;            case 'e':            case 'E':                dec = dec + 14 * (int)Math.pow(16, c);                c--;                break;            case 'f':            case 'F':                dec = dec + 15 * (int)Math.pow(16, c);                c--;                break;            default:                System.out.println("Invalid hexa input");                break;        }    }         // String oct to store the octal equivalent of a hexadecimal number.    String oct ="";         //converting decimal to octal number.    while(dec > 0)    {        oct = dec % 8 + oct;        dec = dec / 8;    }         // Printing the final output.    System.out.println("Equivalent Octal Value = "+oct);}} // This code is contributed by Animesh_Gupta         
# importing math packageimport mathhex = "1AC" # variable oct to store# octal equivalent of hexa decimal# number returned from the methodoct = ""dec = i = 0c = len(hex) - 1 # loop to extract each digit of numberwhile i < len(hex):         # digit extracted    d = hex[i]    if d == '0' or d == '1' or d == '2' or \        d == '3' or d == '4' or d == '5':        dec = dec + int(d) * int(math.pow(16, c))    elif d == '6' or d == '7' or d == '8' or d == '9':        dec = dec + int(d) * int(math.pow(16, c))    elif (d == 'A') or (d == 'a'):        dec = dec + 10 * int(math.pow(16, c))    elif (d == 'B') or (d == 'b'):        dec = dec + 11 * int(math.pow(16, c))    elif (d == 'C') or (d == 'c'):        dec = dec + 12 * int(math.pow(16, c))    elif (d == 'D') or (d == 'd'):        dec = dec + 13 * int(math.pow(16, c))    elif (d == 'E') or (d == 'e'):        dec = dec + 14 * int(math.pow(16, c))    elif (d == 'F') or (d == 'f'):        dec = dec + 15 * int(math.pow(16, c))    else:        print("invalid input")        break    i+= 1    c -= 1 # loop to find octal equivalent# stored in dec i.e.# conversion of decimal to octal.while (dec > 0):    oct = "".join([str(int(dec % 8)) , oct])    dec = int(dec / 8) # printing the final resultprint("Equivalent Octal Value =",oct) # This code is contributed by 29AjayKumar
// C# program to convert// Hexadecimal to Octalusing System;class GFG{   // Driver codepublic static void Main(string[] args){  int dec = 0;   // taking 1AC as an example  // of hexadecimal Number.  string hexa = "1AC";  int c = hexa.Length - 1;   // Finding the decimal  // equivalent of the  // hexa decimal number  for(int i = 0; i < hexa.Length ; i ++ )  {    // Extracting each character    // from the string.    char ch = hexa[i];    switch (ch)    {      case '0':      case '1':      case '2':      case '3':      case '4':      case '5':      case '6':      case '7':      case '8':      case '9':        dec = dec + Int32.Parse(ch.ToString())*                               (int)Math.Pow(16, c);        c--;        break;      case 'a':      case 'A':        dec = dec + 10 * (int)Math.Pow(16, c);        c--;        break;      case 'b':      case 'B':        dec = dec + 11 * (int)Math.Pow(16, c);        c--;        break;      case 'c':      case 'C':        dec = dec + 12 * (int)Math.Pow(16, c);        c--;        break;      case 'd':      case 'D':        dec = dec + 13 * (int)Math.Pow(16, c);        c--;        break;      case 'e':      case 'E':        dec = dec + 14 * (int)Math.Pow(16, c);        c--;        break;      case 'f':      case 'F':        dec = dec + 15 * (int)Math.Pow(16, c);        c--;        break;      default:        Console.Write("Invalid hexa input");        break;    }  }   // String oct to store the octal  // equivalent of a hexadecimal number.  string oct = "";   // converting decimal  // to octal number.  while(dec > 0)  {    oct = dec % 8 + oct;    dec = dec / 8;  }   // Printing the final output.  Console.Write("Equivalent Octal Value = " +                 oct);}} // This code is contributed by rutvik_56
// JavaScript program to convert// Hexadecimal to Octal // Function to convert HexaDecimal to Binaryfunction hex_to_bin(hex){    var bin, place;    var i = 0, rem, val;     bin = 0;    place = 0;     // Hexadecimal to binary conversion    for (i = 0; i < hex.length; i++) {        bin = bin * place;         switch (hex[i]) {        case '0':            bin += 0;            break;        case '1':            bin += 1;            break;        case '2':            bin += 10;            break;        case '3':            bin += 11;            break;        case '4':            bin += 100;            break;        case '5':            bin += 101;            break;        case '6':            bin += 110;            break;        case '7':            bin += 111;            break;        case '8':            bin += 1000;            break;        case '9':            bin += 1001;            break;        case 'a':        case 'A':            bin += 1010;            break;        case 'b':        case 'B':            bin += 1011;            break;        case 'c':        case 'C':            bin += 1100;            break;        case 'd':        case 'D':            bin += 1101;            break;        case 'e':        case 'E':            bin += 1110;            break;        case 'f':        case 'F':            bin += 1111;            break;        default:            console.log("Invalid hexadecimal input.");        }         place = 10000;    }     return bin;} // Function to convert Binary to Octalfunction bin_to_oct(bin){    var octal, place;    var i = 0, rem, val;     octal = 0;    place = 0;     place = 1;     // Binary to octal conversion    while (bin > 0) {        rem = bin % 1000;         switch (rem) {        case 0:            val = 0;            break;        case 1:            val = 1;            break;        case 10:            val = 2;            break;        case 11:            val = 3;            break;        case 100:            val = 4;            break;        case 101:            val = 5;            break;        case 110:            val = 6;            break;        case 111:            val = 7;            break;        }         octal = (val * place) + octal;        bin = Math.floor(bin/1000);         place *= 10;    }     return octal;} // Function to Convert// Hexadecimal Number to Octal Numberfunction hex_to_oct(hex){    var octal, bin;     // convert HexaDecimal to Binary    bin = hex_to_bin(hex);     // convert Binary to Octal    octal = bin_to_oct(bin);     return octal;} // driver code // Get the hexadecimal numbervar hex = "1AC"; // convert hexadecimal to octalconsole.log("Equivalent Octal Value = " + hex_to_oct(hex)); // This code is contributed by phasing17
Equivalent Octal Value = 654
Animesh_Gupta
SHUBHAMSINGH10
rutvik_56
phasing17
aayushi2402
base-conversion
C Language
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.