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;
}
}