Java中byte是占8位二进制,十六进制的数是用4位二进制来表示的。因此当byte转十六进制时,将byte的8位二进制,分为高4位和低4位并分别转化为相应的十六进制,再合到一起即可。当十六进制转byte时,将两个十六进制数转化为相应的byte即可。
byte[]与十六进制字符串之间的转化代码如下:
public class BytesAndHex {
/**
* byte[]转十六进制
* @param bytes
* @return
*/
public String bytesTohex(byte[] bytes) {
StringBuilder hex = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
boolean flag = false;
if (b < 0) flag = true;
int absB = Math.abs(b);
if (flag) absB = absB | 0x80;
System.out.println(absB & 0xFF);
String tmp = Integer.toHexString(absB & 0xFF);
if (tmp.length() == 1) { //转化的十六进制不足两位,需要补0
hex.append("0");
}
hex.append(tmp.toLowerCase());
}
return hex.toString();
}
/**
* 十六进制转byte[]
* @param hex
* @return
*/
public byte[] hexTobytes(String hex) {
byte[] bytes = new byte[hex.length() / 2];
for (int i = 0; i < hex.length(); i = i + 2) {
String subStr = hex.substring(i, i + 2);
boolean flag = false;
int intH = Integer.parseInt(subStr, 16);
if (intH > 127) flag = true;
if (intH == 128) {
intH = -128;
} else if (flag) {
intH = 0 - (intH & 0x7F);
}
byte b = (byte) intH;
bytes[i / 2] = b;
}
return bytes;
}
}