package com.jxkj.util; /** * * @author sourcezero * */ public class Util { /** * 16进制字符串解码 * * @param hex * @return */ public static String hexDecode(String hex) { int cnt = hex.length() / 4; StringBuffer val = new StringBuffer(); try { for (int i = 0; i < cnt; i++) { val.append((char) Integer.parseInt(hex.substring(i * 4, i * 4 + 4), 16)); } return val.toString(); } catch (NumberFormatException e) { return val.toString(); } } /** * 数组转换成十六进制字符串 * * @param byte[] * @return HexString */ public static final String bytesToHexString(byte[] bArray) { StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i < bArray.length; i++) { sTemp = Integer.toHexString(0xFF & bArray[i]); if (sTemp.length() < 2) sb.append(0); sb.append(sTemp.toUpperCase()); } return sb.toString(); } /** * byte数组转回16进制字符串 * * @param bytes * @return */ public static String bytes2Hex(byte[] bytes) { StringBuilder sb = new StringBuilder(); String tmp = null; for (byte b : bytes) { // 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制 tmp = Integer.toHexString(0xFF & b); if (tmp.length() == 1) { // 每个字节8为,转为16进制标志,2个16进制位 tmp = "0" + tmp; } sb.append(tmp); } return sb.toString(); } /** * byte数组转回16进制字符串 * * @param bytes * @return */ public static String bytes2Hex2(byte[] bytes) { final String HEX = "0123456789abcdef"; StringBuilder sb = new StringBuilder(); for (byte b : bytes) { // 取出这个字节的高4位,然后与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数 sb.append(HEX.charAt((b >> 4) & 0x0f)); // 取出这个字节的低位,与0x0f与运算,得到一个0-15之间的数据,通过HEX.charAt(0-15)即为16进制数 sb.append(HEX.charAt(b & 0x0f)); } return sb.toString(); } /** * 字符串转16进制 * * @param str * @return */ public static String string2Hex(String str) { char[] chars = str.toCharArray(); StringBuffer hex = new StringBuffer(); for (int i = 0; i < chars.length; i++) { String tmp = Integer.toHexString((int) chars[i]); hex.append(tmp); } return hex.toString(); } /** * 字符串转16进制,补0 * * @param str * @return */ public static String string2Hex(String str, int addzero) { char[] chars = str.toCharArray(); StringBuffer hex = new StringBuffer(); for (int i = 0; i < chars.length; i++) { String tmp = Integer.toHexString((int) chars[i]); hex.append(addZeroForNum(tmp, addzero)); } return hex.toString(); } /** * 16进制转回字符串 * * @param hex * @return */ public static String hex2String(String hex) { StringBuilder sb = new StringBuilder(); StringBuilder temp = new StringBuilder(); // 49204c6f7665204a617661 split into two characters 49, 20, 4c... for (int i = 0; i < hex.length() - 1; i += 2) { // grab the hex in pairs String output = hex.substring(i, (i + 2)); // convert hex to decimal int decimal = Integer.parseInt(output, 16); // convert the decimal to character sb.append((char) decimal); temp.append(decimal); } return sb.toString(); } /** * 左补0 * * @param str * @param strLength * @return */ public static String addZeroForNum(String str, int strLength) { int strLen = str.length(); if (strLen < strLength) { while (strLen < strLength) { StringBuffer sb = new StringBuffer(); sb.append("0").append(str);// 左补0 // sb.append(str).append("0");//右补0 str = sb.toString(); strLen = str.length(); } } return str; } }