那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?这个问题就在于你想得到的结果是什么样的格式
int&0xFF的意义就是把byte类型的数据的前3个byte位置0,这样得到的结果是1byte的十六进制,要不然的话如果是负数前面24位补1的话得到的就是4byte的十六进制
@Test
public void test() {
byte x = -1;
int y = (int) x;
int z = y & 0xff;
System.out.println("int的-1二进制:" + Integer.toBinaryString(-1));
System.out.println("int的-1十六进制:" + Integer.toHexString(-1));
System.out.println("byte & 0xff后int的-1二进制:" + Integer.toBinaryString(z));
System.out.println("byte & 0xff后int的-1十六进制:" + Integer.toHexString(z));
System.out.println("有byte & 0xff的bytes2HexString1转化后:" + bytes2HexString1(new byte[]{-1}));
System.out.println("没byte & 0xff的bytes2HexString1转化后:" + bytes2HexString2(new byte[]{-1}));
// int的-1二进制:11111111111111111111111111111111
// int的-1十六进制:ffffffff
// byte & 0xff后int的-1二进制:11111111
// byte & 0xff后int的-1十六进制:ff
// 有byte & 0xff的bytes2HexString1转化后:ff
// 没byte & 0xff的bytes2HexString1转化后:ffffffff
}
public static String bytes2HexString1(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toLowerCase();
}
return ret;
}
public static String bytes2HexString2(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i]);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toLowerCase();
}
return ret;
}