Java:将二进制字符串转换为十六进制字符串

3
我需要将二进制字符串转换为十六进制字符串,但是我遇到了问题。 通过以下方法,我已经将二进制字符串转换为十六进制字符串:
public static String binaryToHex(String bin){
   return Long.toHexString(Long.parseLong(bin,2));
}

没问题!但我失去了字符串左边的零。

例如:

这个方法返回这个值:123456789ABCDEF,但是我想要返回这个值:

00000123456789ABCDEF


你不能手动添加缺失的0吗? - Mateusz Dymczyk
3
使用String.format方法将字符串附加0。 - Rohit Jain
你失去它们的原因是因为Long中的前导零没有价值。你要么改变转换方式,要么自己添加它们。@RohitJain建议的String.format也是我的首选。 - Michaël Benjamin Saerens
3个回答

8

与其使用 Long.toHexString,我会使用 Long.parseLong 解析值,然后使用所需宽度(例如你的示例中的21)来输出值:String.format


public static String binaryToHex(String bin) {
   return String.format("%21X", Long.parseLong(bin,2)) ;
}

1
不是很优雅,但有效。
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()方法将其替换为零。

0

只需手动添加零即可。以下是一种方法:

public static String binaryToHex(String bin){
    return ("0000000000000000" + Long.toHexString(Long.parseLong(bin, 2)).replaceAll(".*.{16}", "$1");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接