public static String bytes2HexString(Byte[] b) {
String str = "";
for(int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if(hex.length() == 1) {
hex = "0" + hex;
}
str += hex.toUpperCase();
}
return str;
}
上面是将 byte[] 转化为十六进制的字符串,注意这里 b[i] & 0xFF 将一个byte 和 0xFF进行了按位的与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出 b[i] & 0xFF运算后得出的仍然是个int, 那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?
答案是不行的!!!
原因在于:
- byte的大小为8 bits,而int的大小为32 bits
- java的二进制采用的是补码形式
byte是一个字节保存的,有8个位,即8个0/1。8位的第一个位是符号位, 也就是说0000 0001代表的是数字1 &