package com.thealgorithms.conversions;

// hex = [0 - 9] -> [A - F]
class DecimalToHexaDecimal {

    private static final int sizeOfIntInHalfBytes = 8;
    private static final int numberOfBitsInAHalfByte = 4;
    private static final int halfByte = 0x0F;
    private static final char[] hexDigits = {
        '0',
        '1',
        '2',
        '3',
        '4',
        '5',
        '6',
        '7',
        '8',
        '9',
        'A',
        'B',
        'C',
        'D',
        'E',
        'F',
    };

    // Returns the hex value of the dec entered in the parameter.
    public static String decToHex(int dec) {
        StringBuilder hexBuilder = new StringBuilder(sizeOfIntInHalfBytes);
        hexBuilder.setLength(sizeOfIntInHalfBytes);
        for (int i = sizeOfIntInHalfBytes - 1; i >= 0; --i) {
            int j = dec & halfByte;
            hexBuilder.setCharAt(i, hexDigits[j]);
            dec >>= numberOfBitsInAHalfByte;
        }
        return hexBuilder.toString().toLowerCase();
    }

    // Test above function.
    public static void main(String[] args) {
        System.out.println("Test...");
        int dec = 305445566;
        String libraryDecToHex = Integer.toHexString(dec);
        String decToHex = decToHex(dec);
        System.out.println("Result from the library : " + libraryDecToHex);
        System.out.println("Result decToHex method : " + decToHex);
    }
}
