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:
- 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.
- Als de lengte van de reeks bits deelbaar is door 8, gaat u verder.
- Als de reeks bits alleen cijfers 0 en 1 bevat, gaat u door.
- splitsen de reeks bits in kleinere snaren, die elk exact 8 cijfers zijn.
- Om elke 8-bits string, bekeer het van binair naar decimaal.
- Converteer de vertaling van decimal naar het gewenste ASCII-teken.
- 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;
}
}