将字节数组转化为16进制的字符串?

时间:2023-01-10 15:27:15

public class To_Hex 
{//将字节数组转化为16进制的字符串
public static String toHex(byte[] buffer){
StringBuffer sb = new StringBuffer(buffer.length * 2);
for (int i = 0; i < buffer.length; i++){
   sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
}
return sb.toString();
}
}

在下不知道:sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
  sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
这两句是什么意思?


6 个解决方案

#1


与后可以保证非负
取高半字节右移4位 转化为16进制
取低半字节 转化为16进制

其中注意forDigit方法的参数限制
0 <= digit < radix

#2


buffer[i] & 0xf0) >> 4  先与0xf0相与取高四位,并右移四位

buffer[i] & 0x0f   与0x0f相与取低四位
Character.forDigit((buffer[i] & 0xf0) >> 4, 16)将其转换为16进制

#3


我以前写了一个,原来是用在md5加密算法里的,你可以用这个,:)

        public String bytes2Hex(byte[]bts) {
StringBuilder strBuild = new StringBuilder();

for(int i=0; i<bts.length; i++){
strBuild.append(Integer.toHexString(bts[i]&0xFF));
}

return strBuild.toString();
}

#4


thinking in java里有个例子,使用的是String.format(),你去找找看。

#5


谢谢

#6


该回复于2015-05-26 10:15:40被管理员删除

#1


与后可以保证非负
取高半字节右移4位 转化为16进制
取低半字节 转化为16进制

其中注意forDigit方法的参数限制
0 <= digit < radix

#2


buffer[i] & 0xf0) >> 4  先与0xf0相与取高四位,并右移四位

buffer[i] & 0x0f   与0x0f相与取低四位
Character.forDigit((buffer[i] & 0xf0) >> 4, 16)将其转换为16进制

#3


我以前写了一个,原来是用在md5加密算法里的,你可以用这个,:)

        public String bytes2Hex(byte[]bts) {
StringBuilder strBuild = new StringBuilder();

for(int i=0; i<bts.length; i++){
strBuild.append(Integer.toHexString(bts[i]&0xFF));
}

return strBuild.toString();
}

#4


thinking in java里有个例子,使用的是String.format(),你去找找看。

#5


谢谢

#6


该回复于2015-05-26 10:15:40被管理员删除