2014-08-31 19 views
6

Tôi muốn chuyển đổi nhị phân của tôi (đó là trong chuỗi) để chuỗi thập lục phân cũng có, đây chỉ là một đoạn chương trình kể từ khi chương trình này chỉ là một phần của một chương trình lớn:Chuyển đổi chuỗi nhị phân để một JAVA chuỗi thập lục phân

//the variable name of the binary string is: "binary" 
int digitNumber = 1; 
    int sum = 0; 
    int test = binary.length()%4; 
    if(test!=0) { 
     binary = padLeft(binary, test); 
    } 
    for(int i = 0; i < binary.length(); i++){ 
     if(digitNumber == 1) 
      sum+=Integer.parseInt(binary.charAt(i) + "")*8; 
     else if(digitNumber == 2) 
      sum+=Integer.parseInt(binary.charAt(i) + "")*4; 
     else if(digitNumber == 3) 
      sum+=Integer.parseInt(binary.charAt(i) + "")*2; 
     else if(digitNumber == 4 || i < binary.length()+1){ 
      sum+=Integer.parseInt(binary.charAt(i) + "")*1; 
      digitNumber = 0; 
      if(sum < 10) 
       System.out.print(sum); 
      else if(sum == 10) 
       System.out.print("A"); 
      else if(sum == 11) 
       System.out.print("B"); 
      else if(sum == 12) 
       System.out.print("C"); 
      else if(sum == 13) 
       System.out.print("D"); 
      else if(sum == 14) 
       System.out.print("E"); 
      else if(sum == 15) 
       System.out.print("F"); 
      sum=0; 
     } 
     digitNumber++; 
    } 
    public static String padLeft(String s, int n) { 
     return String.format("%0$"+n+"s", s); 
    }//i added this for padding 

vấn đề là tôi không biết nếu các công trình đệm nhưng tôi chắc chắn rằng chương trình này trả về một chuyển đổi hệ thập lục phân sai của chuỗi nhị phân tôi cố gắng để làm điều này:

http://www.wikihow.com/Convert-Binary-to-Hexadecimal

PS: Tôi cần phải thực hiện nó (không sử dụng bất kỳ built-in function)

+0

Lý do bạn thấy không có gì được in là điều kiện vòng lặp của bạn (i == 0) không đúng ở đầu vòng lặp, do đó vòng lặp không bao giờ thực thi. Tuy nhiên, khi bạn khắc phục điều đó, có nhiều thứ khác sai với mã của bạn. –

Trả lời

18

Nếu bạn không cần phải thực hiện chuyển đổi chính mình, bạn có thể sử dụng mã hiện tại:

int decimal = Integer.parseInt(binaryStr,2); 
String hexStr = Integer.toString(decimal,16); 

Nếu bạn phải thực hiện nó cho mình , có một số vấn đề trong mã của bạn:

  1. Vòng lặp phải lặp lại từ 0 đến binary.length() - 1 (giả sử ký tự đầu tiên của chuỗi đại diện cho bit quan trọng nhất).
  2. Bạn ngầm giả định rằng chuỗi nhị phân của bạn có 4 * x charcters cho một số nguyên x. Nếu điều đó không đúng, thuật toán của bạn sẽ bị hỏng. Bạn nên để lại chuỗi của bạn với số không để có được một Chuỗi có độ dài như vậy.
  3. sum phải được đặt lại về 0 sau mỗi chữ số thập phân bạn xuất.
  4. System.out.print(digitNumber); - tại đây bạn nên in sum, không phải digitNumber.

Dưới đây là cách mã chủ yếu là cố định trông:

int digitNumber = 1; 
    int sum = 0; 
    String binary = "011110101010"; 
    for(int i = 0; i < binary.length(); i++){ 
     if(digitNumber == 1) 
      sum+=Integer.parseInt(binary.charAt(i) + "")*8; 
     else if(digitNumber == 2) 
      sum+=Integer.parseInt(binary.charAt(i) + "")*4; 
     else if(digitNumber == 3) 
      sum+=Integer.parseInt(binary.charAt(i) + "")*2; 
     else if(digitNumber == 4 || i < binary.length()+1){ 
      sum+=Integer.parseInt(binary.charAt(i) + "")*1; 
      digitNumber = 0; 
      if(sum < 10) 
       System.out.print(sum); 
      else if(sum == 10) 
       System.out.print("A"); 
      else if(sum == 11) 
       System.out.print("B"); 
      else if(sum == 12) 
       System.out.print("C"); 
      else if(sum == 13) 
       System.out.print("D"); 
      else if(sum == 14) 
       System.out.print("E"); 
      else if(sum == 15) 
       System.out.print("F"); 
      sum=0; 
     } 
     digitNumber++; 
    } 

Output:

7AA

này sẽ chỉ làm việc nếu số lượng chữ số nhị phân là divisable 4, vì vậy bạn phải thêm bên trái 0 đệm dưới dạng bước sơ bộ.

+0

đây là những gì tôi đang cố gắng làm http://www.wikihow.com/Convert-Binary-to-Hexadecimal – dumas

+0

@dumas Bạn gần như đã làm đúng, nhưng bạn có một số lỗi, như đã đề cập trong câu trả lời của tôi. – Eran

0

Bạn có thể thử một cái gì đó như thế này.

private void bitsToHexConversion(String bitStream){ 

    int byteLength = 4; 
    int bitStartPos = 0, bitPos = 0; 
    String hexString = ""; 
    int sum = 0; 

    // pad '0' to make input bit stream multiple of 4 

    if(bitStream.length()%4 !=0){ 
     int tempCnt = 0; 
     int tempBit = bitStream.length() % 4;   
     while(tempCnt < (byteLength - tempBit)){ 
      bitStream = "0" + bitStream; 
      tempCnt++; 
     } 
    } 

    // Group 4 bits, and find Hex equivalent 

    while(bitStartPos < bitStream.length()){ 
     while(bitPos < byteLength){ 
      sum = (int) (sum + Integer.parseInt("" + bitStream.charAt(bitStream.length()- bitStartPos -1)) * Math.pow(2, bitPos)) ; 
      bitPos++; 
      bitStartPos++; 
     } 
     if(sum < 10) 
      hexString = Integer.toString(sum) + hexString; 
     else 
      hexString = (char) (sum + 55) + hexString; 

     bitPos = 0; 
     sum = 0; 
    } 
    System.out.println("Hex String > "+ hexString); 
} 

Hope this helps: D

0
import java.util.*; 
public class BinaryToHexadecimal 
{ 
     public static void main() 
     { 
     Scanner sc=new Scanner(System.in); 
     System.out.println("enter the binary number"); 
     double s=sc.nextDouble(); 
     int c=0; 
     long s1=0; 
     String z=""; 
     while(s>0) 
     { 
      s1=s1+(long)(Math.pow(2,c)*(long)(s%10)); 
      s=(long)s/10; 
      c++; 
     } 
     while(s1>0) 
     { 
      long j=s1%16; 
      if(j==10) 
      { 
       z="A"+z; 
      } 
      else if(j==11) 
      { 
       z="B"+z; 
      } 
      else if(j==12) 
      { 
       z="C"+z; 
      } 
      else if(j==13) 
      { 
       z="D"+z; 
      } 
      else if(j==14) 
      { 
       z="E"+z; 
      } 
      else if(j==15) 
      { 
       z="F"+z; 
      } 
      else 
      { 
       z=j+z; 
      } 
      s1=s1/16; 
     } 
    System.out.println("The respective Hexadecimal number is : "+z); 
    } 
} 
0

Bằng cho số nhị phân 01011011, chúng tôi sẽ chuyển đổi nó lúc đầu đến số thập phân, mỗi số sẽ Math.pow() theo chiều dài decrementd:

01011011 = (0 × 2 (7)) + (1 × 2 (6)) + (0 × 2 (5)) + (1 × 2 (4)) + (1 × 2 (3)) + (0 × 2 (2)) + (1 × 2 (1)) + (1 × 2 (0))

= (0 × 128) + (1 × 64) + (0 × 32) + (1 × 16) + (1 × 8) + (0 × 4) + (1 × 2) + (1 × 1)

= 0 + 64 + 0 + 16 + 8 + 0 + 2 + 1

= 91 (hình thức thập phân của số nhị phân)

Bây giờ sau khi nhận được số thập phân, chúng ta phải chuyển nó sang số thập lục phân.

Vì vậy, 91 là lớn hơn 16. Vì vậy, chúng ta phải chia cho 16.

Sau khi chia cho 16, thương là 5 và còn lại là 11.

còn lại nhỏ hơn 16.

số thập lục phân của phần còn lại là B.

Quotient là 5 và hệ thập lục phân số còn lại là B.

Đó là, 91 = 16 × 5 11 = B

5 = 16 × 0 + 5 =

= 5B

Thực hiện:

String hexValue = binaryToHex(binaryValue); 

    //Display result 
    System.out.println(hexValue); 


private static String binaryToHex(String binary) { 
    int decimalValue = 0; 
    int length = binary.length() - 1; 
    for (int i = 0; i < binary.length(); i++) { 
     decimalValue += Integer.parseInt(binary.charAt(i) + "") * Math.pow(2, length); 
     length--; 
    } 
    return decimalToHex(decimalValue); 
} 
private static String decimalToHex(int decimal){ 
    String hex = ""; 
    while (decimal != 0){ 
     int hexValue = decimal % 16; 
     hex = toHexChar(hexValue) + hex; 
     decimal = decimal/16; 
    } 
    return hex; 
} 

private static char toHexChar(int hexValue) { 
    if (hexValue <= 9 && hexValue >= 0) 
     return (char)(hexValue + '0'); 
    else 
     return (char)(hexValue - 10 + 'A'); 
} 
Các vấn đề liên quan