Преобразование шестнадцатеричной строки (шестнадцатеричной) в двоичную

Я нашел следующий способ преобразования шестнадцатеричного в двоичное:

String binAddr = Integer.toBinaryString(Integer.parseInt(hexAddr, 16)); 

Хотя этот подход работает для небольших шестнадцатеричных чисел, шестнадцатеричные числа, такие как следующее

A14AA1DBDB818F9759

Вызывает исключение NumberFormatException.

Поэтому я написал следующий метод, который, кажется, работает:

private String hexToBin(String hex){
    String bin = "";
    String binFragment = "";
    int iHex;
    hex = hex.trim();
    hex = hex.replaceFirst("0x", "");

    for(int i = 0; i < hex.length(); i++){
        iHex = Integer.parseInt(""+hex.charAt(i),16);
        binFragment = Integer.toBinaryString(iHex);

        while(binFragment.length() < 4){
            binFragment = "0" + binFragment;
        }
        bin += binFragment;
    }
    return bin;
}

Вышеупомянутый метод в основном берет каждый символ в шестнадцатеричной строке и преобразует его в его двоичный эквивалент, заполняет его нулями, если необходимо, а затем присоединяет его к возвращаемому значению. Это правильный способ выполнить преобразование? Или я упускаю из виду то, что может привести к сбою моего подхода?

Заранее благодарим за любую помощь.

22
задан Dave Jarvis 20 August 2014 в 19:07
поделиться

1 ответ

import java.util.*;
public class HexadeciamlToBinary
{
   public static void main()
   {
       Scanner sc=new Scanner(System.in);
       System.out.println("enter the hexadecimal number");
       String s=sc.nextLine();
       String p="";
       long n=0;
       int c=0;
       for(int i=s.length()-1;i>=0;i--)
       {
          if(s.charAt(i)=='A')
          {
             n=n+(long)(Math.pow(16,c)*10);
             c++;
          }
         else if(s.charAt(i)=='B')
         {
            n=n+(long)(Math.pow(16,c)*11);
            c++;
         }
        else if(s.charAt(i)=='C')
        {
            n=n+(long)(Math.pow(16,c)*12);
            c++;
        }
        else if(s.charAt(i)=='D')
        {
           n=n+(long)(Math.pow(16,c)*13);
           c++;
        }
        else if(s.charAt(i)=='E')
        {
            n=n+(long)(Math.pow(16,c)*14);
            c++;
        }
        else if(s.charAt(i)=='F')
        {
            n=n+(long)(Math.pow(16,c)*15);
            c++;
        }
        else
        {
            n=n+(long)Math.pow(16,c)*(long)s.charAt(i);
            c++;
        }
    }
    String s1="",k="";
    if(n>1)
    {
    while(n>0)
    {
        if(n%2==0)
        {
            k=k+"0";
            n=n/2;
        }
        else
        {
            k=k+"1";
            n=n/2;
        }
    }
    for(int i=0;i<k.length();i++)
    {
        s1=k.charAt(i)+s1;
    }
    System.out.println("The respective binary number is : "+s1);
    }
    else
    {
        System.out.println("The respective binary number is : "+n);
    }
  }
}
0
ответ дан 29 November 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: