The Hexadecimal number system as the name suggests comprises 16 entities. These 16 entities consist of 10 digits, 0-9 representing the first 10 numbers of the hexadecimal system as well. For the remaining 6 numbers, we use English alphabets ranging from A through F to represent the numbers 10 to 15. It should be noted that the lowest number in the hexadecimal system is 0 with the highest being 15 represented by F. A hexadecimal number can be derived from a binary number by clubbing 4 digits to constitute a single character of the hexadecimal number.
Example:
Input: 11011111 Output: DF Input: 10001101 Output: 8D
- In the above example, the binary number 10001101 can be broken down into chunks of 4 bits such as 1000 and 1101 which act as 2 characters for the corresponding hexadecimal number.
- The resultant hexadecimal number would be 8D where every character is determined by calculating its corresponding value in the decimal system and replacing it with an alphabet if it is a two-digit number in this case D which represents 13. The hexadecimal system is also referred to as base-16.
For the conversion of binary to hexadecimal, we are going to use the following two approaches :
- Using the toHexString() builtin java method
- Repeatedly getting the remainder and dividing the converted decimal number by 16
Approach 1:
Using this approach, we first convert the binary number to a decimal number which is stored as an Integer. Then, we simply use the toHexString() method of java to generate the desired output string.
Syntax :
public static String toHexString(int num)
Parameter:
- num – This parameter specifies the number which is to be convertedÂ
to a Hexadecimal string. The data-type is int.
Return Value: The function returns a string representation of the int argument as an unsigned integer in base 16.
Algorithm :
- Convert the binary number to a decimal number.
- To convert the binary number to a decimal number, first, extract each digit using by getting the remainder by dividing by 10.
- Next, multiply this digit with increasing powers of 2.
- Keep on dividing the original binary number by 10 to eliminate the last digit in each iteration.
- After having gotten the decimal number, just use the toHexString() method to get the desired output.
Example:
Java
// Java program to convert binary to hexadecimal Â
class GFG { Â
    // method to convert binary to decimal     int binaryToDecimal( long binary)     { Â
        // variable to store the converted         // binary number         int decimalNumber = 0 , i = 0 ; Â
        // loop to extract the digits of the binary         while (binary > 0 ) { Â
            // extracting the digits by getting             // remainder on dividing by 10 and             // multiplying by increasing integral             // powers of 2             decimalNumber                 += Math.pow( 2 , i++) * (binary % 10 ); Â
            // updating the binary by eliminating             // the last digit on division by 10             binary /= 10 ;         } Â
        // returning the decimal number         return decimalNumber;     } Â
    // method to convert decimal to hexadecimal     String decimalToHex( long binary)     {         // variable to store the output of the         // binaryToDecimal() method         int decimalNumber = binaryToDecimal(binary); Â
        // converting the integer to the desired         // hex string using toHexString() method         String hexNumber             = Integer.toHexString(decimalNumber); Â
        // converting the string to uppercase         // for uniformity         hexNumber = hexNumber.toUpperCase(); Â
        // returning the final hex string         return hexNumber;     } Â
    // Driver Code     public static void main(String[] args)     { Â
        // instantiating the class         GFG ob = new GFG(); Â
        long num = 10011110 ;                // calling and printing the output         // of decimalToHex() method         System.out.println( "Inputted number : " +num);         System.out.println(ob.decimalToHex( 10011110 ));     } } |
Inputted number : 10011110 9E
Time complexity: O(log N) where N is the input binary number, since the number of iterations in the while loop is proportional to the number of digits in the binary number.
Auxiliary space: O(1)
Approach 2:Â
- Under the second approach, we again first convert the binary number to a decimal number.
- Then we continuously divide and get the remainder of this decimal number to get the single character for each set of 4 bits we can find in the original binary number.
Algorithm:Â
- Convert the binary to a decimal using steps 2-4 in the above algorithm.
- Next, run a while loop with the terminating condition that the decimal number becomes 0 and the updating condition that the decimal number is divided by 16 in each iteration.
- In each iteration get the remainder by dividing the number by 16.
- Constitute a new String and keep on adding characters which are the remaining on dividing by 16.
- If the remainder is greater than or equal to 10 replace it with alphabets A-F depending on the remainder.
Example:Â
Java
// Java program to convert binary to hexadecimal Â
class GFG { Â
    // method to convert binary to decimal     int binaryToDecimal( long binary)     { Â
        // variable to store the converted binary         int decimalNumber = 0 , i = 0 ; Â
        // loop to extract digits of the binary         while (binary > 0 ) { Â
            // extracting each digit of the binary             // by getting the remainder of division             // by 10 and multiplying it by             // increasing integral powers of 2             decimalNumber                 += Math.pow( 2 , i++) * (binary % 10 ); Â
            // update condition of dividing the             // binary by 10             binary /= 10 ;         } Â
        // returning the decimal         return decimalNumber;     } Â
    // method to convert decimal to hex     String decimalToHex( long binary)     { Â
        // variable to store the output of         // binaryToDecimal() method         int decimalNumber = binaryToDecimal(binary); Â
        // character array to represent double         // digit remainders         char arr[] = { 'A' , 'B' , 'C' , 'D' , 'E' , 'F' }; Â
        // variable to store the remainder on         // division by 16         int remainder, i = 0 ; Â
        // declaring the string that stores the         // final hex string         String hexNumber = "" ; Â
        // loop to convert decimal to hex         while (decimalNumber != 0 ) { Â
            // calculating the remainder of decimal             // by dividing by 16             remainder = decimalNumber % 16 ; Â
            // checking if the remainder is >= 10             if (remainder >= 10 )                                // replacing with the corresponding                 // alphabet from the array                 hexNumber = arr[remainder - 10 ] + hexNumber;                        else                                hexNumber = remainder + hexNumber; Â
            // update condition of dividing the             // number by 16             decimalNumber /= 16 ;         } Â
        // returning the hex string         return hexNumber;     } Â
    // Driver Code     public static void main(String[] args)     { Â
        // instantiating the class         GFG ob = new GFG(); Â
        long num = 11000011 ;                // printing and calling the         // decimalToHex() method         System.out.println( "Input : " +num);         System.out.println( "Output : " +ob.decimalToHex(num));     } } |
Input : 11000011 Output : C3
Â