字节数组转成16进制字符串,有个地方没看懂 标注的地方实在没看懂,为什么<2 要添加0,是什么原理? if (hv.length() < 2) { stringBuilder.append(0); } 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能帮忙解答一下在什么情况下需要补0,是16进制最前面那个0还是什么情况!这种问题自己写个单元测试测一下就知道了,比如 Integer i = 15; Integer.toHexString(i) 结果就是 "f",这种情况在前面补个0 就是 "0f",Integer i = 16; Integer.toHexString(i) 结果就是 "10",这种情况就不需要补0了 一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。 倒不如直接 String hv = String.format("%02X", v); 不要这样做,这样做性能较差,参考:public class Hex { private static final char[] HEX = "0123456789abcdef".toCharArray(); private Hex() { } public static void main(String[] args) { byte[] bytes = { 0 , 1 , 2 , (byte)0x7f }; System.out.println( toHex( bytes ) ); } public static String toHex(byte[] bytes) { if ( bytes == null ) { return null; } char[] chs = new char[bytes.length << 1]; for ( int i = 0 , k = 0 ; i < bytes.length ; i++ ) { chs[k++] = HEX[(bytes[i] & 0xf0) >>> 4]; chs[k++] = HEX[(bytes[i] & 0x0f)]; } return new String(chs); }} 错了吧,一个char是8个位,4位就可以表示16进制 错了吧,一个char是8个位,4位就可以表示16进制所以一个char需要两个十六进制,那里错了? 请教为什么必须用static? 关于从一个JavaBean取值的问题,请叫一下各位,谢谢 能否重复使用该对象? 求帮我解释以下的java概念! 這個異常為什麼這麼觸發呀, 怎麼寫到方法的後面?? 使用war文件的好处是什么? JTextArea 如何让新内容一直保持在前端. 各位大侠,请问JFrame上的标题栏问题?????????? 怎样用文本框显示数据, 紧急请教:RMI接口编译出错怎么办? 单元测试弹窗 no socket available,不知道该怎么解决,求大神指点一下吧 C转成java语音的问题
这种问题自己写个单元测试测一下就知道了,比如 Integer i = 15; Integer.toHexString(i) 结果就是 "f",这种情况在前面补个0 就是 "0f",
Integer i = 16; Integer.toHexString(i) 结果就是 "10",这种情况就不需要补0了
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
public class Hex { private static final char[] HEX = "0123456789abcdef".toCharArray(); private Hex() {
} public static void main(String[] args) { byte[] bytes = { 0 , 1 , 2 , (byte)0x7f }; System.out.println( toHex( bytes ) );
} public static String toHex(byte[] bytes) { if ( bytes == null ) {
return null;
} char[] chs = new char[bytes.length << 1]; for ( int i = 0 , k = 0 ; i < bytes.length ; i++ ) {
chs[k++] = HEX[(bytes[i] & 0xf0) >>> 4];
chs[k++] = HEX[(bytes[i] & 0x0f)];
} return new String(chs);
}
}
所以一个char需要两个十六进制,那里错了?