16进制相关操作

[b][color=red]开发者博客:[url]http://www.developsearch.com[/url][/color][/b]

/**
* 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();
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值