Java二进制翻译

时间:2017-02-03 20:08:15

标签: java

我正在寻找关于这个二进制翻译问题的一些帮助。问题是:在本练习中,您将为文本翻译器编写二进制文件!

正如我们所见,每个字符都可以用8位或一个字节的字符串表示。例如,二进制字符串01000001 2 的十进制值为65 10 ,映射到字符“A”。

到目前为止我有这个,但输出是: 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;
    }
}

2 个答案:

答案 0 :(得分:1)

以下是解决方案:

对于每个位串,执行以下操作:

  1. 创建256个字符的数组,每个元素的值是索引的ASCII值。例如,元素65的值是字符&#39; A&#39;。这是下面引用的翻译表。
  2. 如果位串的长度可被8整除,则继续。
  3. 如果位串仅包含数字0和1,则继续。
  4. 将比特串拆分为较小的字符串,每个字符串的长度恰好为8位数。
  5. 对于每个8位字符串,将二进制转换为十进制。
  6. 使用translationTable,将十进制转换为所需的ASCII字符。
  7. 将各个字符累积为字符串(可能使用StringBuilder)。

答案 1 :(得分:0)

-finit-real=zero
-finit-integer=0