字节数组转化为十六进制字符串时 &0xff

我是资源的搬运工~~~

关于这个字节数组转化为十六进制字符串时 &0xff,看到很多次了,这里整理一下网上的资料,记录一下:

byte 为什么要&0xff

byte 为什么要 &0xff

 /**
     * 字节数组转换成字符串HEX表示
     *
     * @param data 字节数组
     * @return 字节数组的HEX字符串表示
     */
    public static String bytes2HexString(byte[] data) {
        if (data == null) {
            throw new NullPointerException();
        }

        StringBuilder buffer = new StringBuilder();
        for (byte b : data) {
            String hex = Integer.toHexString(b & 0xff);//为啥呢1 ??
            if (hex.length() == 1) {
                buffer.append('0');//为啥呢2 ??
            }
            buffer.append(hex);
        }
        return buffer.toString().toUpperCase();
    }

为啥呢1 :保持二进制补码的一致性,因为计算机保存机制是:正数存储的二进制原码,负数存储的是二进制的补码

为啥呢2:如果是十六进制的0f,默认只显示f,此时要补上0

注:当系统检测到byte可能会转化成int或者说byte与int类型进行运算的时候,就会将byte的内存空间高位补1(也就是按符号位补位)扩充到32位,再参与运算。

猜你喜欢

转载自blog.csdn.net/hpp_1225/article/details/82853304