我需要将二进制字符串转换为十六进制字符串,但我有一个问题。 我通过这种方法将二进制字符串转换为十六进制字符串:
public static String binaryToHex(String bin){
return Long.toHexString(Long.parseLong(bin,2));
}
没关系!但我丢失了字符串左边的零。 例如:
方法返回:123456789ABCDEF, 但我想要归还这个:
00000123456789ABCDEF
答案 0 :(得分:8)
而不是Long.toHexString
我会使用Long.parseLong
来解析值,然后使用String.format
来输出具有所需宽度的值(在您的示例中为21):
public static String binaryToHex(String bin) {
return String.format("%21X", Long.parseLong(bin,2)) ;
}
答案 1 :(得分:0)
不是很优雅,但有效
public static String binaryToHex(String bin) {
String hex = Long.toHexString(Long.parseLong(bin, 2));
return String.format("%" + (int)(Math.ceil(bin.length() / 4.0)) + "s", hex).replace(' ', '0');
}
我已经使用String.format()来左侧填充字符串,然后调用replace()将其替换为零。
答案 2 :(得分:0)
只需手动添加零。这是一种方式:
public static String binaryToHex(String bin){
return ("0000000000000000" + Long.toHexString(Long.parseLong(bin, 2)).replaceAll(".*.{16}", "$1");
}