16进制相关操作

开发者博客:http://www.developsearch.com

/**
 * 16进制相关操作
 * 
 * @author chenxin
 * @version [版本号, 2012-5-21]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class 16Util {

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

	/**
     * 返回int的16进制表示
     * 
     * @param l 传进的长整数
     * @return 传进参数的16进制字符串表示
     */
    public static String getHexStr(long l)
    {
        StringBuffer sbRst = new StringBuffer(20);
        int idx = (int) ((l & 0xF000000000000000L) >> 60);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x0F00000000000000L) >> 56);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x00F0000000000000L) >> 52);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x000F000000000000L) >> 48);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x0000F00000000000L) >> 44);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x00000F0000000000L) >> 40);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x000000F000000000L) >> 36);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x0000000F00000000L) >> 32);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x00000000F0000000L) >> 28);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x000000000F000000L) >> 24);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x0000000000F00000L) >> 20);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x00000000000F0000L) >> 16);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x000000000000F000L) >> 12);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x0000000000000F00L) >> 8);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) ((l & 0x00000000000000F0L) >> 4);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (int) (l & 0x000000000000000FL);
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        return sbRst.toString();
    }

    /**
     * 返回int的16进制表示
     * 
     * @param i 传进的整数
     * @return 传进参数的16进制字符串表示
     */
    public static String getHexStr(int i)
    {
        StringBuffer sbRst = new StringBuffer(10);
        int idx = (i & 0xF0000000) >> 28;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (i & 0x0F000000) >> 24;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (i & 0x00F00000) >> 20;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (i & 0x000F0000) >> 16;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (i & 0x0000F000) >> 12;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (i & 0x00000F00) >> 8;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (i & 0x000000F0) >> 4;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = i & 0x0000000F;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        return sbRst.toString();
    }

    /**
     * 返回Short的16进制表示
     * 
     * @param s 传进的短整形
     * @return 传进参数的16进制字符串表示
     */
    public static String getHexStr(short s)
    {
        StringBuffer sbRst = new StringBuffer(6);
        int idx = (s & 0xF000) >> 12;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (s & 0x0F00) >> 8;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = (s & 0x00F0) >> 4;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = s & 0x000F;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        return sbRst.toString();
    }

    /**
     * 返回字节的16进制表示
     * 
     * @param pByte 传进的字节
     * @return 传进参数的16进制字符串表示
     */
    public static String getHexStr(byte pByte)
    {
        StringBuffer sbRst = new StringBuffer(4);
        int idx = (pByte & 0xF0) >> 4;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[idx]);
        idx = pByte & 0x0F;
        idx = idx < 0 ? idx + 16 : idx;
        sbRst.append(HEX[pByte & 0x0F]);
        return sbRst.toString();
    }


}

猜你喜欢

转载自keepwork.iteye.com/blog/1539953
今日推荐