public class HexUtil {
/**
* 将指定字符串src,以每两个字符分割转换为16进制形式 如:"2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF,
* 0xD9}
*
* @param src
* String
* @return byte[]
*/
public static byte[] HexString2Bytes(String src) {
byte[] ret = new byte[src.length() / 2];
byte[] tmp = src.getBytes();
for (int i = 0; i < src.length() / 2; i++) {
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
}
return ret;
}
/**
* 将两个ASCII字符合成一个字节; 如:"EF"--> 0xEF
*
* @param src0
* byte
* @param src1
* byte
* @return byte
*/
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[] { src0 }))
.byteValue();
_b0 = (byte) (_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[] { src1 }))
.byteValue();
byte ret = (byte) (_b0 ^ _b1);
return ret;
}
/**
* 将指定byte数组以16进制的形式打印到控制台
*
* @param hint
* String
* @param b
* byte[]
* @return void
*/
public static String printHexString(byte[] b) {
StringBuffer returnValue = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
returnValue.append(hex.toUpperCase() + "|");
}
return "[" + returnValue.toString() + "]";
}
/**
* 计算校验和
* @param src
* @return
*/
public static String checkSum(String src){
int length = src.length();
String sumString = null;
for (int i = 0; i < length ; i=i+2) {
sumString = sumHex(sumString,src.substring(i, i+2));
}
return sumString.substring(sumString.length()-2, sumString.length()).toUpperCase();
}
private static String sumHex(String src1,String src2){
if(src1==null){
return src2;
}
long x = Long.parseLong(src1, 16);
long y = Long.parseLong(src2, 16);
return Long.toHexString(x+y);
}
/**
* 16进制数自增1
* @param src
* @return
*/
public static String increase(String src) {
if (src.equals(Const.STATE_OPEN) || Long.parseLong(src,16) >= 100) {
return src;
}
long x = Long.parseLong(src,16);
String tmp = Long.toHexString(x + 1).toUpperCase();
if (tmp.length() == 1) {
return "0" + tmp;
}
return tmp.substring(tmp.length()-2, tmp.length()).toUpperCase();
}
/**
* 16进制数自减1
* @param src
* @return
*/
public static String reduce(String src) {
if (src.equals(Const.STATE_CLOSE) || Long.parseLong(src,16) <= 0) {
return src;
}
long x = Long.parseLong(src,16);
String tmp = Long.toHexString(x - 1).toUpperCase();
if (tmp.length() == 1) {
return "0" + tmp;
}
return tmp.substring(tmp.length()-2, tmp.length()).toUpperCase();
}
}