1.关于这段bytesToHexStr方法byte数组转换十六进制
疑问是为什么要进行bcd.length * 2 有什么含义吗2.bytesToHexStr方法和 bytesToHexStr2方法有什么区别
由于对位操作不是很了解,希望大侠求解
3.有个疑问就是java难道没有封装好的API直接通过byte数组转换成16进制返回String的方法吗,如果有麻烦把代码怎么实现,谢谢
public static final String bytesToHexStr(byte[] bcd) {
StringBuffer s = new StringBuffer(bcd.length * 2); for (int i = 0; i < bcd.length; i++) {
s.append(bcdLookup[(bcd[i] >>> 4) & 0x0f]);
s.append(bcdLookup[bcd[i] & 0x0f]);
} return s.toString();
} private static final char[] bcdLookup = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
'E', 'F' };//字节转化为十六进制字符串
public String bytesToHexStr2(byte[] bcd) {
String s ="";
for (int i = 0; i < bcd.Length; i++) {
s +=(bcdLookup[(((byte)bcd[i]) >> 4) & 0 x0f]);
s+=(bcdLookup[(byte)bcd[i] & 0 x0f]);
}
return s;
}
疑问是为什么要进行bcd.length * 2 有什么含义吗2.bytesToHexStr方法和 bytesToHexStr2方法有什么区别
由于对位操作不是很了解,希望大侠求解
3.有个疑问就是java难道没有封装好的API直接通过byte数组转换成16进制返回String的方法吗,如果有麻烦把代码怎么实现,谢谢
public static final String bytesToHexStr(byte[] bcd) {
StringBuffer s = new StringBuffer(bcd.length * 2); for (int i = 0; i < bcd.length; i++) {
s.append(bcdLookup[(bcd[i] >>> 4) & 0x0f]);
s.append(bcdLookup[bcd[i] & 0x0f]);
} return s.toString();
} private static final char[] bcdLookup = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
'E', 'F' };//字节转化为十六进制字符串
public String bytesToHexStr2(byte[] bcd) {
String s ="";
for (int i = 0; i < bcd.Length; i++) {
s +=(bcdLookup[(((byte)bcd[i]) >> 4) & 0 x0f]);
s+=(bcdLookup[(byte)bcd[i] & 0 x0f]);
}
return s;
}
方法二,你每处理一个字符,就会生成好几个字符串对象3.java API里有提供单个byte or int数值,转为16进制字符串的API,但是基于第二条的原因,就算你调用这些方法,一样不可避免要生成中间的临时字符串对象
2、bytesToHexStr方法和 bytesToHexStr2方法实现的功能一样。不过bytesToHexStr方法更有效率一些。其实关键是bcd[i] >>> 4) & 0x0f;bcd[i] & 0x0f;前者取得了bcd[i]的高4位,后者取得了低四位。