Java:将二进制字符串转换为十六进制字符串[重复]

Posted

技术标签:

【中文标题】Java:将二进制字符串转换为十六进制字符串[重复]【英文标题】:Java: convert binary string to hex string [duplicate] 【发布时间】:2013-10-29 21:46:00 【问题描述】:

我需要将二进制字符串转换为十六进制字符串,但我遇到了问题。 我通过这种方法将二进制字符串转换为十六进制字符串:

public static String binaryToHex(String bin)
   return Long.toHexString(Long.parseLong(bin,2));

没关系!但我丢失了字符串左侧的零。 例如:

方法返回:123456789ABCDEF, 但我想退回这个:

00000123456789ABCDEF

【问题讨论】:

你不能手动添加缺失的 0 吗? 使用String.format方法将String附加到0's 你松开它们的原因是因为 Long 中的前导零没有价值。您要么必须更改处理转换的方式,要么必须自己重新添加它们。 @RohitJain 建议的 String.format 也有我的偏好。 【参考方案1】:

我将使用Long.parseLong 来解析值,而不是Long.toHexString,然后使用String.format 输出具有所需宽度的值(在您的示例中为21):


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

【讨论】:

【参考方案2】:

不是很优雅,但很有效

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() 将其替换为零。

【讨论】:

【参考方案3】:

只需手动添加零。这是一种方法:

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

【讨论】:

以上是关于Java:将二进制字符串转换为十六进制字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java将二进制字符串转换为十进制[重复]

Java将字节数组转换为十六进制字节数组[重复]

在Java中从整数转换为二进制时保留整个字节[重复]

c ++将字符串转换为十六进制[重复]

如何将十六进制字符串转换为十六进制数字 [重复]

将字符串转换为十六进制字节数组[重复]