import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args)
{
int digitNumber=1;
int sum = 0;
String binary = "1110101011111010";
String hex;
for(int i = 0; i < binary.length(); i++)
{
if(digitNumber == 1)
sum += Integer.parseInt(binary.charAt(i) + "")*128;
else if (digitNumber == 2)
sum += Integer.parseInt(binary.charAt(i) + "")*64;
else if (digitNumber == 3)
sum += Integer.parseInt(binary.charAt(i) + "")*32;
else if (digitNumber == 4)
sum += Integer.parseInt(binary.charAt(i) + "")*16;
else if (digitNumber == 5)
sum += Integer.parseInt(binary.charAt(i) + "")*8;
else if (digitNumber == 6)
sum += Integer.parseInt(binary.charAt(i) + "")*4;
else if (digitNumber == 7)
sum += Integer.parseInt(binary.charAt(i) + "")*2;
else if (digitNumber == 8)
{
sum += Integer.parseInt(binary.charAt(i) + "")*1;
hex = Integer.toString(sum,16);
System.out.print(hex);
}
else if (digitNumber == 9)
{
digitNumber = 1;
sum=0;
}
digitNumber++;
}
}
}
大家好,我正在尝试将Binary String转换为Hexadecimal。我的字符串二进制是“ 1110101011111010”。输出应为EAFA,但我的输出为EA7A。 我的代码有什么问题?有人可以帮我吗?
答案 0 :(得分:1)
我认为您的代码太多。
尝试一下:
String hex = Long.toHexString(Long.parseLong(binary, 2)); // handles up to 63 bits
请记住:您拥有的代码越多,存在的漏洞就越多。
答案 1 :(得分:1)
您的代码中的实际问题是,在digitNumber == 9
的情况下,您将digitNumber
设置为1,然后对其进行了递增,但是您没有解析该数字,因此跳过了您要解析的第二个字节的第一位。
推荐的方法是切换为使用Integer.parseInt(binary, 2)
,Long.parseLong(binary, 2)
甚至是new BigInteger(binary, 2)
。
但是,如果要修复代码,则需要将digitNumber == 9
的检查移到循环的开始,并且独立于其他if语句,因此:
for(int i = 0; i < binary.length(); i++) {
if (digitNumber == 9) {
digitNumber = 1;
sum=0;
}
if(digitNumber == 1)
sum += Integer.parseInt(binary.charAt(i) + "")*128;
else
// rest of your if...
digitNumber++;
}
答案 2 :(得分:1)
如果您希望使用长string
,则可以使用BigInteger
将任何二进制字符串转换为十六进制。
public static String convertBinaryToHexadecimal(String binaryStr) {
return new BigInteger(binaryStr, 2).toString(16);
}
输出:
BigInteger num = BigInteger.valueOf(Long.MAX_VALUE);
String binaryStr = num.add(num).toString(2); // 2 times bigger than long
System.out.println(convertBinaryToHexadecimal(binaryStr)); // fffffffffffffffe
public static String convertHexadecimalToBinary(String hexadecimalStr, int length) {
return String.format("%0" + length + 'd', new BigInteger(new BigInteger(hexadecimalStr, 16).toString(2)));
}
输出:
String hexadecimalStr = "7B";
System.out.println(convertHexadecimalToBinary(hexadecimalStr, 8)); // 01111011
答案 3 :(得分:0)
使用像@ Bohemian♦这样的内置函数无疑是最容易的。但是,如果您确实需要/想要手动执行二进制转换,则可以将for
循环更改为以下内容:
for (int i = 0; i < binary.length(); i++) {
sum += Integer.parseInt(binary.charAt(binary.length() - i - 1) + "") * (1 << i);
}
这从右到左循环遍历二进制字符串。 1 << i
等同于Math.pow(2, i)
。
答案 4 :(得分:0)
我使用了将字符串二进制转换为十六进制的基本方法,请在下面找到:
byte[] sizeAr = new byte[4];
int num = inputStream.read();
sizeAr = ByteBuffer.allocate(4).putInt(num).array();
int size = ByteBuffer.wrap(sizeAr).asIntBuffer().get();