java 二进制转16进制

问题是下面两个方法中if判断是干什么,我看java sha1 从二进制转16进制这里,没看懂。
//第一个方法
public String bytes2Hex(byte[]bts) {
String des="";
String tmp=null;
for (int i=0;i<bts.length;i++) {
tmp=(Integer.toHexString(bts[i] & 0xFF));
if (tmp.length()==1) {//这里是什么意思????
des+="0";
}
des+=tmp;
}
return des;
}

第二个方法:
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(message.getBytes("UTF-8"));//更新摘要
byte[] hash = md.digest();//获得密文
digest = new StringBuilder();
// 字节数组转换为 十六进制 数
for (int i = 0, j = hash.length; i < j; i++) {
int v = hash[i] & 0xFF;// 每个字节与0xff进行运算转为10进制,在用Integer转16进制
if (v < 16) {//这里判断v<16是什么意思,为什么要加个0???
digest.append("0");
}
digest.append(Integer.toHexString(v).toUpperCase());
}

第1个回答  推荐于2016-09-08
方法1:
中判断mp.length()==1 是判断转换为16进制数后如果是一位数就要在前面补零凑够两位数,从byte数组中一个一个转换后从前往后拼的字符串,如果是一位数就提前补零然后加上转换得到的个位数.

方法2:
中十进制要转换成16进制,如果小于16说明转换后就一位数,(比如15=0E)需要在前面补零凑够二位数,大于16就是二位数
至于为什么要分组,保持位数一致吧,就像月份和时间,一位数的时候都会前面补零凑位数的.整齐规范.本回答被提问者和网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网