Java:关于byte转16进制的& 0xFF,我的理解正确吗?

如果直接写成Integer.toHexString(byte);,byte是8位,而需要的是int,即32位,所以会进行符号位扩展,如果原来的byte为11111111(... 如果直接写成Integer.toHexString(byte);,byte是8位,而需要的是int,即32位,所以会进行符号位扩展,如果原来的byte为11111111(补码),扩展后就会变为11111111 11111111 11111111 11111111(补码),虽然转换为源码后两个数都表示-1没有什么影响,但是由于toHexString这个函数是硬生生的把二进制的各部分先拆分再转换的16进制,所以得到的16进制就是0xffffffff,那就比-1大太多把原参数都变了

以上是本人思考过后的结果,请问我的理解正确吗?
展开
 我来答
匿名用户
推荐于2016-03-29
展开全部
/* *
 * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)
 *来转换成16进制字符串。  
 * @param src byte[] data  
 * @return hex string  
 */     
public static String bytesToHexString(byte[] src){  
    StringBuilder stringBuilder = new StringBuilder("");  
    if (src == null || src.length <= 0) {  
        return null;  
    }  
    for (int i = 0; i < src.length; i++) {  
        int v = src[i] & 0xFF;  
        String hv = Integer.toHexString(v);  
        if (hv.length() < 2) {  
            stringBuilder.append(0);  
        }  
        stringBuilder.append(hv);  
    }  
    return stringBuilder.toString();  
}
追问
前辈您好,我就是看到& 0xFF这儿懵了,奇怪为什么不直接把src[i]放进去,然后得出上面的结论,但是不敢肯定,您看我理解的对吗
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式