标注的地方实在没看懂,为什么<2 要添加0,是什么原理?
if (hv.length() < 2) {
stringBuilder.append(0);
}
8 个解决方案
#1
就是补零。凑成两位。
#2
能帮忙解答一下在什么情况下需要补0,是16进制最前面那个0还是什么情况!
#3
这种问题自己写个单元测试测一下就知道了,比如 Integer i = 15; Integer.toHexString(i) 结果就是 "f",这种情况在前面补个0 就是 "0f",
Integer i = 16; Integer.toHexString(i) 结果就是 "10",这种情况就不需要补0了
#4
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
#5
倒不如直接 String hv = String.format("%02X", v);
#6
不要这样做,这样做性能较差,参考:
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);
}
}
#7
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
错了吧,一个char是8个位,4位就可以表示16进制
#8
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
错了吧,一个char是8个位,4位就可以表示16进制
所以一个char需要两个十六进制,那里错了?
#1
就是补零。凑成两位。
#2
就是补零。凑成两位。
能帮忙解答一下在什么情况下需要补0,是16进制最前面那个0还是什么情况!
#3
就是补零。凑成两位。
能帮忙解答一下在什么情况下需要补0,是16进制最前面那个0还是什么情况!
这种问题自己写个单元测试测一下就知道了,比如 Integer i = 15; Integer.toHexString(i) 结果就是 "f",这种情况在前面补个0 就是 "0f",
Integer i = 16; Integer.toHexString(i) 结果就是 "10",这种情况就不需要补0了
#4
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
#5
倒不如直接 String hv = String.format("%02X", v);
#6
不要这样做,这样做性能较差,参考:
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);
}
}
#7
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
错了吧,一个char是8个位,4位就可以表示16进制
#8
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制,
也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
错了吧,一个char是8个位,4位就可以表示16进制
所以一个char需要两个十六进制,那里错了?