[英]Convert string binary to hexadecimal
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++;
}
}
}
大家好,我正在尝试将二进制字符串转换为十六进制。 我的字符串二进制是“1110101011111010”。 输出应该是EAFA,但我的输出是EA7A。 我的代码有什么问题? 有人可以帮我吗?
我觉得你的代码太多了。
尝试这个:
String hex = Long.toHexString(Long.parseLong(binary, 2)); // handles up to 63 bits
请记住:您拥有的代码越多,隐藏错误的地方就越多。
您代码中的实际问题是,在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++;
}
如果您需要一个长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
使用@Bohemian♦ 所做的内置函数当然是最简单的。 但是,如果您确实需要/想要手动进行二进制转换,则可以将for
循环更改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)
。
我使用了将字符串二进制转换为十六进制的基本方法,请在下面找到:
public class StringToHexaDecmal {
// Driver program to test above function
public static void main(String[] args) {
String num = new String("1110101011111010");
int decValue = binaryToDecimal(num);
stringToHexadecimal(decValue);
}
// Function to convert binary to decimal
static int binaryToDecimal(String n) {
String num = n;
int dec_value = 0;
// Initializing base value to 1,
// i.e 2^0
int base = 1;
int len = num.length();
for (int i = len - 1; i >= 0; i--) {
if (num.charAt(i) == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
// Function to convert decimal value to Hexadecimal
private static void stringToHexadecimal(int no) {
// TODO Auto-generated method stub
String hexadecimalNo = "";
char c;
while (no != 0) {
int rem = no % 16;
if (rem > 9 && rem <= 15) {
c = (char)(rem + 55);
hexadecimalNo = c + hexadecimalNo;
}
if (rem < 10) {
hexadecimalNo = rem + hexadecimalNo;
}
no = no / 16;
}
System.out.println(hexadecimalNo);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.