📅  最后修改于: 2023-12-03 15:39:14.695000             🧑  作者: Mango
在计算机中,二进制和十六进制都是常用的进制表示法。将二进制转换成十六进制可以更方便地表示和比较大量二进制数据。本文将介绍如何用Java编写将二进制转换为十六进制的程序。
将二进制转换为十六进制的基本思路是将二进制位按照四位一组分组,然后将每组分别转换成相应的十六进制数。例如,二进制数 1101 1011 可以分成 1101 和 1011 两组,分别转换为 D 和 B,那么这个二进制数的十六进制表示就是 DB。
下面是将二进制转换为十六进制的Java代码实现,包括两种方法:使用位运算符的方法和使用Java内置函数的方法。
public static String binaryToHex(String binary) {
String hex = "";
int len = binary.length();
if (len % 4 != 0) {
// 填充前导零,保证长度是4的倍数
while (len % 4 != 0) {
binary = "0" + binary;
len = binary.length();
}
}
for (int i = 0; i < len; i += 4) {
String subStr = binary.substring(i, i + 4);
int decimal = Integer.parseInt(subStr, 2);
hex += Integer.toHexString(decimal);
}
return hex.toUpperCase();
}
这个方法的基本思路是先判断二进制字符串的长度是否是4的倍数,如果不是则在前面补零,然后将二进制字符串按照每四位一组分成多个子字符串,将每个子字符串转换为十进制整数,再用Java内置的 Integer.toHexString()
函数将整数转换成相应的十六进制字符串,最终将这些十六进制字符串拼接成一个完整的十六进制字符串返回。
public static String binaryToHex(String binary) {
BigInteger bi = new BigInteger(binary, 2);
String hex = bi.toString(16);
if (hex.length() % 2 != 0) {
// 填充前导零,保证长度是偶数
hex = "0" + hex;
}
return hex.toUpperCase();
}
这个方法比使用位运算符的方法简洁,直接使用Java内置的大整数类 BigInteger
的构造函数将二进制字符串转换为大整数,再用 BigInteger
的 toString()
方法将大整数转换为十六进制字符串,最后判断字符串长度是否为偶数,如果不是则在前面补零。注意,这个方法的返回值全部转换成大写字母。
System.out.println(binaryToHex("1101")); // D
System.out.println(binaryToHex("11011011")); // DB
System.out.println(binaryToHex("111111110")); // FF
本文介绍了两种将二进制转换为十六进制的Java方法,其中一种使用位运算符,另一种使用Java内置函数。程序员可以根据实际需求和编码习惯选择使用哪种方法,但无论选择哪种方法,都需要理解将二进制转换为十六进制的基本思路,即分组转换。