java string转hex_java字符串与Hex互转

packagecom.joe.readwritemacs.tool;

/*** reference apache commonshttp://commons.apache.org/codec/**@authorAub**/public classHex {

/*** 用于建立十六进制字符的输出的小写字符数组*/private static final char[] DIGITS_LOWER= { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

/*** 用于建立十六进制字符的输出的大写字符数组*/private static final char[] DIGITS_UPPER= { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

/*** 将字节数组转换为十六进制字符数组**@paramdata* byte[]*@return十六进制char[]*/public static char[] encodeHex(byte[] data) {

returnencodeHex(data, true);}

/*** 将字节数组转换为十六进制字符数组**@paramdata* byte[]*@paramtoLowerCase*true传换成小写格式 ,false传换成大写格式*@return十六进制char[]*/public static char[] encodeHex(byte[] data, booleantoLowerCase) {

returnencodeHex(data,toLowerCase ? DIGITS_LOWER: DIGITS_UPPER);}

/*** 将字节数组转换为十六进制字符数组**@paramdata* byte[]*@paramtoDigits* 用于控制输出的char[]*@return十六进制char[]*/protected static char[] encodeHex(byte[] data, char[] toDigits) {

intl = data.length;char[] out = new char[l << 1];// two characters form the hex value.for(inti = 0,j = 0;i < l;i++) {

out[j++] = toDigits[(0xF0& data[i]) >>> 4];out[j++] = toDigits[0x0F& data[i]];}

returnout;}

/*** 将字节数组转换为十六进制字符串**@paramdata* byte[]*@return十六进制String*/public staticString encodeHexStr(byte[] data) {

returnencodeHexStr(data, true);}

/*** 将字节数组转换为十六进制字符串**@paramdata* byte[]*@paramtoLowerCase*true传换成小写格式 ,false传换成大写格式*@return十六进制String*/public staticString encodeHexStr(byte[] data, booleantoLowerCase) {

returnencodeHexStr(data,toLowerCase ? DIGITS_LOWER: DIGITS_UPPER);}

/*** 将字节数组转换为十六进制字符串**@paramdata* byte[]*@paramtoDigits* 用于控制输出的char[]*@return十六进制String*/protected staticString encodeHexStr(byte[] data, char[] toDigits) {

return newString(encodeHex(data,toDigits));}

/*** 将十六进制字符数组转换为字节数组**@paramdata* 十六进制char[]*@returnbyte[]*@throwsRuntimeException* 如果源十六进制字符数组是一个奇怪的长度,将抛出运行时异常*/public static byte[] decodeHex(char[] data) {

intlen = data.length;

if((len & 0x01) != 0) {

throw newRuntimeException("Odd number of characters.");}

byte[] out = new byte[len >> 1];

// two characters form the hex value.for(inti = 0,j = 0;j < len;i++) {

intf = toDigit(data[j],j) << 4;j++;f = f | toDigit(data[j],j);j++;out[i] = (byte) (f & 0xFF);}

returnout;}

/*** 将十六进制字符转换成一个整数**@paramch* 十六进制char*@paramindex* 十六进制字符在字符数组中的位置*@return一个整数*@throwsRuntimeException* 当ch不是一个合法的十六进制字符时,抛出运行时异常*/protected static inttoDigit(charch, intindex) {

intdigit = Character.digit(ch,16);if(digit == -1) {

throw newRuntimeException("Illegal hexadecimal character "+ ch

+ " at index "+ index);}

returndigit;}

public static voidmain(String[] args) {

String srcStr = "02A30307";//"待转换字符串";String encodeStr = encodeHexStr(srcStr.getBytes());String decodeStr = newString(decodeHex(encodeStr.toCharArray()));System.out.println("转换前:"+ srcStr);System.out.println("转换后:"+ encodeStr);System.out.println("还原后:"+ decodeStr);}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值