2012-02-12 40 views
19

Tôi tìm thấy hex cách sau đây để chuyển đổi nhị phân:Chuyển đổi chuỗi thập lục phân (hex) thành một chuỗi nhị phân

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

Trong khi phương pháp này làm việc cho số hex nhỏ, một số hex như sau

A14AA1DBDB818F9759 

Ném một NumberFormatException.

tôi do đó đã viết các phương pháp sau đây mà dường như làm việc:

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; 
} 

Phương pháp trên cơ bản lấy từng ký tự trong chuỗi Hex và chuyển đổi nó thành các phần tử tương đương nhị phân của nó bằng 0 nếu cần sau đó kết hợp nó với giá trị trả về. Đây có phải là cách thích hợp để thực hiện chuyển đổi không? Hay tôi nhìn thấy một cái gì đó có thể gây ra cách tiếp cận của tôi để thất bại?

Cảm ơn bạn trước vì đã hỗ trợ.

+0

có một chặng đường dài không làm việc cho những gì bạn đang muốn? Nó cũng có ToBinaryString(). Điều đó sẽ hỗ trợ ... Phạm vi từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807. – Jared

+0

nếu điều đó làm những gì bạn muốn, hãy cho tôi biết để tôi có thể đăng câu trả lời. – Jared

+0

Mã của bạn có vẻ tốt với tôi. Bạn cũng có thể xem liên kết sau: http://java2everyone.blogspot.in/2009/04/java-hexadecimal-to-binary.html?m=1 –

Trả lời

34

BigInteger.toString(radix) sẽ làm những gì bạn muốn. Chỉ cần vượt qua trong một radix của 2.

static String hexToBin(String s) { 
    return new BigInteger(s, 16).toString(2); 
} 
+0

Thật vậy. Vấn đề duy nhất ở đây là các con số phát triển quá lớn để vừa với một 'int'. –

+0

Đó là vấn đề, xin lỗi. Overflow là vấn đề với mã của OP, và giải pháp này sửa chữa nó. –

+0

@LouisWasserman, hiểu rõ. Khá đúng. –

4
Integer.parseInt(hex,16);  
System.out.print(Integer.toBinaryString(hex)); 

Parse hex (String) để nguyên với cơ sở 16 sau đó chuyển nó sang Binary Chuỗi sử dụng phương pháp toBinaryString (int)

dụ

int num = (Integer.parseInt("A2B", 16)); 
System.out.print(Integer.toBinaryString(num)); 

Sẽ in

101000101011 

Max Hex vakue xử lý bởi int là FFFFFFF

tức là nếu FFFFFFF0 được truyền ti sẽ cho lỗi

2

Với tất cả zero:

static String hexToBin(String s) { 
    String preBin = new BigInteger(s, 16).toString(2); 
    Integer length = preBin.length(); 
    if (length < 8) { 
     for (int i = 0; i < 8 - length; i++) { 
      preBin = "0" + preBin; 
     } 
    } 
    return preBin; 
} 
1
public static byte[] hexToBin(String str) 
    { 
     int len = str.length(); 
     byte[] out = new byte[len/2]; 
     int endIndx; 

     for (int i = 0; i < len; i = i + 2) 
     { 
      endIndx = i + 2; 
      if (endIndx > len) 
       endIndx = len - 1; 
      out[i/2] = (byte) Integer.parseInt(str.substring(i, endIndx), 16); 
     } 
     return out; 
    } 
0
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); 
    } 
    } 
} 
Các vấn đề liên quan