Java 十六进制String转byte数组
标签(空格分隔): Java
基本概念
十六进制(Hex): 0-9,a-f组成
二进制: 01表示
字节(byte): Java中一个字节表示8个二进制位
字符(char): Java中一个字符有两个字节
4个二进制位可以表示0-15,即0000-1111,所以可以表示一个十六进制数,一个字节就可以表示两个十六进制数。
byte和byte[]转十六进制字符串
/**
* byte转Hex
*/
public static String byteToHex(byte b) {
String hex = Integer.toHexString(b & 0xFF);
if(hex.length() < 2) {
hex = "0" + hex;
}
return hex;
}
/**
* byte[]转Hex
*/
public static String bytesToHex(byte[] b) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if(hex.length() < 2) {
hex = "0" + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
十六进制字符串转byte和byte[]
/**
* Hex转byte,hex只能含两个字符,如果是一个字符byte高位会是0
*/
public static byte hexTobyte(String hex) {
return (byte)Integer.parseInt(hex, 16);
}
/**
* Hex转byte[],两种情况,Hex长度为奇数最后一个字符会被舍去
*/
public static byte[] hexTobytes(String hex) {
if (hex.length() < 1) {
return null;
} else {
byte[] result = new byte[hex.length() / 2];
int j = 0;
for(int i = 0; i < hex.length(); i+=2) {
result[j++] = (byte)Integer.parseInt(hex.substring(i,i+2), 16);
}
return result;
}
}