2017-02-03 68 views
0

我正在尋找這個二進制翻譯器問題的一些幫助。問題是:在這個練習中,你會寫一個二進制文本翻譯器!Java二進制翻譯器

正如我們所看到的,每個字符都可以用一個8位字符串或一個字節來表示。例如,二進制字符串01000001 具有映射到字符'A'的十進制值65 。

到目前爲止,我有這個,但輸出是:^h CTH * 否)MO

這裏是我的代碼:

public class Scratchpad extends ConsoleProgram 
{ 
    public void run() 
    { 
     System.out.println(binaryToText("0100100001001001")); 
     System.out.println(binaryToText("010000110110111101100100011001010100100001010011")); 
     System.out.println(binaryToText("010011100110100101100011011001010010000001001010011011110110001000100001")); 
    } 

    public String binaryToText(String binary) 
    { 
     String s2 = ""; 
     char nextChar; 

     for(int i = 0; i <= binary.length()-8; i += 9) //this is a little tricky. we want [0, 7], [9, 16], etc (increment index by 9 if bytes are space-delimited) 
     { 
      nextChar = (char)Integer.parseInt(binary.substring(i, i+8), 2); 
      s2 += nextChar; 
     } 
     return s2; 
    } 

    public int binaryToDecimal(String binaryString) 
    { 
     int decimal = 0; 
      int base = 2; 
      for (int i = binaryString.length() - 1; i >= 0; i--) { 
       if (binaryString.charAt(i) == '1') 
        decimal += Math.pow(base,i); 
      } 
      return decimal; 
    } 
} 
+0

1. 010000012是九位數字的長度。它與問題描述「... 8位字符串...」不匹配。 1.二進制數字不能包含數字'2'。 3. 01000001是十進制數字「65」的二進制表示。這與6510明顯不同。 – DwB

+3

「例如,二進制串010000012的十進制值爲6510」 - (a)二進制串中不能有2(b)8位的範圍從0到255 ,所以規定的十進制值不正確 – ControlAltDel

+0

什麼OP說01000001_2(基數2)等於65_10(基數10)。什麼是預期的輸出? – luk2302

回答

1

這裏是解決方案:

對於每個位串,執行以下操作:

  1. 創建256個字符的數組,每個元素的值是索引的ASCII值。例如,元素65的值是字符'A'。這是下面引用的translationTable。
  2. 如果位串的長度可以被8整除,繼續。
  3. 如果位串只包含數字0和1,則繼續。
  4. 將位串分成較小的字符串,每個字符串的長度均爲8位數字。
  5. 對於每個8位字符串,從二進制轉換爲十進制。
  6. 使用translationTable,將十進制轉換爲所需的ASCII字符。
  7. 將單個字符累加到一個字符串中(可能使用StringBuilder)。