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]放进去,然后得出上面的结论,但是不敢肯定,您看我理解的对吗
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询