# ASCII als 8-bit Binärstring darstellen



## blueJisCrap (27. Sep 2011)

Hi,

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.


```
Input: 'Q'
Index: 81
Output: "01010001"
```

Gruss


----------



## Gassssst (28. Sep 2011)

int zahl = 'Q';

..........


----------



## nillehammer (28. Sep 2011)

- 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


----------



## blueJisCrap (28. Sep 2011)

nillehammer hat gesagt.:


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


So weit, so gut.



nillehammer hat gesagt.:


> - die führenden Nullen kann man mit String.format() (%8d) ausgeben


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:

```
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.


----------



## nillehammer (29. Sep 2011)

> An dem Punkt häng ich wieder. Ich hab versucht, diese Seite zu verstehen, was allerdings nicht wirklich geklappt hat...


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:

```
// binaryString ist der ASCII-Wert Deines chars in Binärform
final String eightZeros = "00000000";
String result = eightZeros.substring(binaryString.lengh()) + binaryString;
```


----------



## Spacerat (29. Sep 2011)

Willst es mal so versuchen?
	
	
	
	





```
String bin = String.format("%8s", Integer.toBinaryString(255 & 'Q')).replace(' ', '0');
```


----------

