十六进制字符串每两位做一byte,转成一样得byte数据。
eg:"01D25F23AA" ;
由于java中byte大于127会成为负数,实际使用时请遍历 byte[i] &= FF;(实例见上篇)
/**
* 字符串每两位一组转化为数组
* @param data
* @return
*/
public static byte[] str2HexByte(String data) {
if(1==data.length()%2)
return null;
else{
byte[] li = new byte[data.length()/2];
for (int i = 0; i < data.length(); i+=2) {
int cp1 = data.codePointAt(i);
int cp2 = data.codePointAt(i+1);
li[i/2] = (byte)(asc2Hex(cp1)<<4|asc2Hex(cp2));
}
return li;
}
}
/**
* 字符asc码数值转为byte数值
* @param data
* @return
*/
public static int asc2Hex(int data){
int li;
if(data >= 0X30 && data <= 0X39){//0-9
li = data - 0X30;
}else if (data >= 0X41 && data <= 0X5A){//A-F
li = data - 0X37;
}else if(data >= 0X61 && data <= 0X7A){//a-f
li = data - 0X57;
}else{
li = data;
}
return li;
}