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;
}
解决方案 »
- 亲,帮忙解决一下这个问题
- 如何实现利用字符串“abcedfg”变“AbCdEfG”,
- 出现异常,看看!
- 求解一个简单的java程序。菜鸟求救!!!
- 一个页面select取值的问题
- 按 上一个 这个按纽 怎么没反应啊!!各位帮我看看。
- 关于jScrollPane的问题
- 如何从for 循环中退出
- 为什么我的applet在浏览器里和appletview里运行得不一样?
- 急!请高手指教! 我的applet从html里取得的PARAM可以用于显示,可为什么用作判断条件却不起效果??
- Swing slider问题
- 向数据库里插入系统日期时,出这Cannot format given Object as a Date
方法二,你每处理一个字符,就会生成好几个字符串对象3.java API里有提供单个byte or int数值,转为16进制字符串的API,但是基于第二条的原因,就算你调用这些方法,一样不可避免要生成中间的临时字符串对象
2、bytesToHexStr方法和 bytesToHexStr2方法实现的功能一样。不过bytesToHexStr方法更有效率一些。其实关键是bcd[i] >>> 4) & 0x0f;bcd[i] & 0x0f;前者取得了bcd[i]的高4位,后者取得了低四位。