通过串口或网络接收的数据常需要以16进制显示查看,但Java中没有直接将字节数组转换为16进制字符串的方法。
方法一:循环每个字节转为16进制字符串并判断补0每字节用两字符表示。
/**
* 字节数组转16进制
* @param bytes 需要转换的byte数组
* @return 转换后的Hex字符串
*/
public static String bytesToHex(byte[] bytes) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < bytes.length; i++) {
//使用toHexString
String hex = Integer.toHexString(bytes[i] & 0xFF);
if(hex.length() < 2){
sb.append(0);
}
sb.append(hex);
//或使用format
//hex=String.format("%02x", bytes[i]);
}
return sb.toString();
}
方法二:使用BigInteger类将字节数组转换为BigInteger对象。然后使用toString()方法将BigInteger对象转换为16进制字符串。但这样转出来的字符串开头没有0。
String hexString=new BigInteger(1, bytes).toString(16);