Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Und zwar habe ich ein beliebiges ASCII-Zeichen als Eingangswert, ausgelesen aus einer Datei. Nun möchte ich dieses Zeichen in einen String umwandeln, der den Index des Zeichens in Binärform darstellt (inklusive eventueller Nullen vor dem ersten Einser). Nur komme ich nicht drauf wie ich vom char zur gewünschten Form komme, wäre also für Erklärungen, Beispiele oder auch Anregungen dankbar.
- char wird von Java auch als Zahl interpretiert (siehe Post von Gassst)
- diesen kann man einer int Variablen zuweisen (auch siehe Post von Gassst)
- daraus macht man einen Integer
- auf dem ruft man toBinaryString auf. Dort werden führende Nullen leider nicht mit dargestellt.
- die führenden Nullen kann man mit String.format() (%8d) ausgeben
- char wird von Java auch als Zahl interpretiert (siehe Post von Gassst)
- diesen kann man einer int Variablen zuweisen (auch siehe Post von Gassst)
- daraus macht man einen Integer
- auf dem ruft man toBinaryString auf. Dort werden führende Nullen leider nicht mit dargestellt
An dem Punkt häng ich wieder. Ich hab versucht, diese Seite zu verstehen, was allerdings nicht wirklich geklappt hat...
EDIT: Das Problem hab ich jetzt durch eine einfache while Schleife gelöst, die Nullen an den Anfang setzt bis der String die Länge 8 hat. Die Lösung mit String.format(...) würde mich dennoch interessieren
Allerdings hat sich jetzt ein mit dem Thema verwandtes Problem ergeben, da ich nämlich nicht nur ein Zeichen, sondern eine ganze Zeichenkette umwandeln will. Das Problem besteht darin, dass ich zwar einen String der richtigen Länge, aber des falschen Inhalts bekomme (eine Wiederholung eines einzelnen Binärstrings statt der gewünschten Aneinanderreihung verschiedener).
Kurz gesagt: Ich habe test1.txt, möchte level1.txt und bekomme aber test2.txt.
Hier der Code dazu:
Java:
import java.lang.ArrayIndexOutOfBoundsException;
import java.io.*;
public class Test
{
public static void downgrade(String inputF, String outputF)
{
try
{
//Einlesen der Datei und splitten des Eingangsstrings
File inputFile = new File(inputF + ".txt");
FileReader reader = new FileReader(inputFile);
String result = "";
for(;;)
{
int readout = reader.read();
if(readout == -1)
{
break;
}
result = result + (char) readout;
}
String[] content = result.split("ª");
String outCont = content[0] + " " + content[1] + " ";
//Der interessante Teil: Umwandeln von content[2] in einen BinaryString
int b = content[2].length();
for(int i = 0; i < b; i++)
{
String part = Integer.toBinaryString(content[2].charAt(b - 1));
while(part.length() < 8)
{
part = "0" + part;
}
outCont = outCont + part;
}
char[] output = outCont.toCharArray();
//Erstllen und beschreiben der Ausgangsdatei
File outputFile = new File(outputF + ".txt");
FileWriter writer = new FileWriter(outputF + ".txt");
writer.write(output);
writer.close();
}
catch(FileNotFoundException e404)
{
System.out.println("Error: " + e404.getMessage());
System.exit(1);
}
catch(IOException eIO)
{
System.out.println("Error: " + eIO.getMessage());
System.exit(1);
}
catch(ArrayIndexOutOfBoundsException eAIOOBE)
{
System.out.println("Error: " + eAIOOBE.getMessage());
System.exit(1);
}
}
}
Ach ja, kurz zum Sinn dahinter: Ich arbeite nach wie vor an meinem kleinen Snake-Klon, mit dem ich vor ca. einem Jahr begonnen, dann fast 1 Jahr habe ruhen lassen, vor ca. 1 Monat wieder ausgegraben und (fast) komplett neu geschrieben habe. Dieser Codeausschnitt dient der Optimierung des Levelformats Die Nullen und Einsen repräsentieren Barrieren und freie Felder.
Spiel mit den Optionen mal ein bischen herum. Es lohnt sich. Das kann man gut gebrauchen. Aber für Deinen konkreten Anwendungsfall ist es wohl eher nicht passend. Tschuldige, war schon spät gestern. Sowas in der Art könnte funktionieren:
Java:
// binaryString ist der ASCII-Wert Deines chars in Binärform
final String eightZeros = "00000000";
String result = eightZeros.substring(binaryString.lengh()) + binaryString;