Java binaire vertaler

Ik ben op zoek naar hulp bij dit probleem met binaire vertalers. De vraag luidt: in deze oefening schrijf je een binair naar tekstvertaler!

Zoals we hebben gezien, kan elk teken worden weergegeven door een reeks van 8 bits of een byte. De binaire tekenreeks 010000012heeft bijvoorbeeld de decimale waarde 6510, wat overeenkomt met het teken ‘A’.

Tot nu toe heb ik dit, maar de output is:H
CÞ*
NÒ)MØ

Hier is mijn code:

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

Antwoord 1, autoriteit 100%

Hier is de oplossing:

Voer voor elke reeks bits het volgende uit:

  1. Maak een array van 256 tekens, de waarde van elk element is de ASCII-waarde van de index. De waarde van element 65 is bijvoorbeeld het karakter ‘A’. Dit is de vertaling die hieronder wordt verwezen.
  2. Als de lengte van de reeks bits deelbaar is door 8, gaat u verder.
  3. Als de reeks bits alleen cijfers 0 en 1 bevat, gaat u door.
  4. splitsen de reeks bits in kleinere snaren, die elk exact 8 cijfers zijn.
  5. Om elke 8-bits string, bekeer het van binair naar decimaal.
  6. Converteer de vertaling van decimal naar het gewenste ASCII-teken.
  7. accumuleer de afzonderlijke tekens in een string (misschien met behulp van een StringBuilder).

Antwoord 2

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

Other episodes