java中byte转换int时为何与0xff进行与运算

本文深入探讨了Java中byte类型数据与int类型数据之间的转换原理,特别是通过与0xFF进行按位与运算来正确表示byte类型的十六进制值,避免高位补1导致的错误表示。通过具体代码示例,详细解释了如何使用Integer.toHexString方法结合按位与运算,以及不同处理方式下得到的十六进制字符串的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

那么为何要和 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;
    }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值