Java二进制翻译器

问题描述 投票:0回答:2

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

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

到目前为止,我有这个,但输出是:HCÞ*NÒ)MØ

这是我的代码:

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;
    }
}
java
2个回答
1
投票

这是解决方案:

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

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

0
投票
public class Scratchpad extends ConsoleProgram
{

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

        for(int i = 0; i <= binary.length()-8; i += 8) 
        {
            nextChar = (char)Integer.parseInt(binary.substring(i, i+8), 2);
            s2 += nextChar;
        }
        return s2;

    public int binaryToDecimal(String binaryString)
    {
        int numPlaces = binaryString.length();

        int currentExponent = numPlaces - 1;

        int decimalValue = 0;

        for(int i = 0; i < binaryString.length(); i++)
        {

            int placeValue = (int) Math.pow(2, currentExponent);

            char currentDigit = binaryString.charAt(i);
            int digitValue = Character.getNumericValue(currentDigit);

            System.out.print(digitValue + " * (" + placeValue + ")");
            if(i != binaryString.length() - 1)
            {
                System.out.print(" + ");
            }

            decimalValue += digitValue * placeValue;

            currentExponent--;
        }

        System.out.println(" = " + decimalValue);

        return decimalValue;
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.