java byte转16进制

dlgz888 2009-10-14 11:23:55
public static final String toHex(byte[] data, int off, int length) {
// double size, two bytes (hex range) for one byte
StringBuffer buf = new StringBuffer(data.length * 2);
for (int i = off; i < length; i++) {
// don't forget the second hex digit
if (((int) data[i] & 0xff) < 0x10) {
buf.append("0");
}
buf.append(Long.toString((int) data[i] & 0xff, 16));
/* if (i < data.length - 1) {
buf.append(" ");
} */
}
return buf.toString().toUpperCase();
}
请问以上方法我把byte数组转成16进制的形式,使用该方法时候如果遇到11字节的数据就会丢失。。请问是什么原因??
...全文
106 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
public class Test2 {

private final static char[] HEX = "0123456789abcdef".toCharArray();

public static void main(String[] args) {
byte[] bys = { 0x7e, (byte)0x8f, 0x7c, (byte)0xa9 };
System.out.println(toHex(bys, 0, 3));
}

public static String toHex(byte[] bys, int start, int length) {
if(bys == null || bys.length == 0) {
throw new IllegalArgumentException("byte array is empty");
}
if(start < 0) {
throw new IllegalArgumentException("start is array index that greater than or equal 0");
}
if(length < 1) {
throw new IllegalArgumentException("length must be greater than 0");
}
if(start + length > bys.length) {
throw new IllegalArgumentException("array max length is " + bys.length);
}
char[] chs = new char[length * 2];
for(int i = start, k = start + length, n = 0; i < k; i++) {
chs[n++] = HEX[bys[i] >> 4 & 0xf];
chs[n++] = HEX[bys[i] & 0xf];
}
return new String(chs);
}
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧