import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
 * Convert a number to hex
 * <p>
 * Created by kiyan on 6/3/16.
 */
public class ConvertToHex {

    private ConvertToHex c;

    /**
     *
     */
    public String convert(int num, int base) {
        // Deal with negative numbers
        boolean isNegative = false;
        if (num < 0 && base == 10) {
            isNegative = true;
            num = -num;
        }

        // Process individual digits
        StringBuilder sb = new StringBuilder();
        while (num != 0) {
            int rem = num % base;
            char c = (char) ((rem > 9) ? (rem - 10) + 'a' : rem + '0');
            sb.insert(0, c);
            num = num / base;
        }

        // If number is negative, append '-'
        if (isNegative)
            sb.insert(0, '-');
        return sb.toString();
    }

    /**
     * Using bit mask and bit-wise operation
     */
    public String convertB(int num) {
        int mask = 15;
        StringBuffer sb = new StringBuffer();
        while (num != 0) {
            int index = (num & mask);
            char c = (char) ((index < 10) ? (index + '0') : ('a' + index - 10));
            sb.append(c);
            num = num >>> 4;
        }
        sb.reverse();
        return sb.toString();
    }

    @Before
    public void setUp() {
        c = new ConvertToHex();
    }

    @Test
    public void testPositiveNumbers() {
        String res = c.convert(80, 16);
        Assert.assertEquals("50", res);
        res = c.convert(3200, 16);
        Assert.assertEquals("c80", res);
    }

    @After
    public void tearDown() {
        c = null;
    }
}

add convert a number to heximal