Tabelle mit ASCII-Code in Java

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Und wenn du den Lehrer beeindrucken willst, dann packst du auch noch die Oktal- und Hexadezimalzahlen dazu:

public class Main {
    public static void main(String[] args) {
        char[] asciibyte = new char[256];
        System.out.println("Dezimal\tHexadezimal\tOktal\tZeichen");
        for (int i = 0; i < asciibyte.length; i++) {
            asciibyte[i] = (char)i;
            System.out.println(i + "\t" + Integer.toHexString(i) + "\t\t" + Integer.toOctalString(i) + "\t" + asciibyte[i]);
        }
    }
}

Weiß zwar nicht warum genau ihr ein Array dafür nutzen sollt, aber hab es mal eingebaut. Schau dir am besten genau an was ich geändert habe, damit du auch den Sinn dahinter verstehst.

public class Main {
    public static void main(String[] args) {
        char[] asciibyte = new char[256];
        System.out.println("Nummer\tZeichen");
        for (int i = 0; i < asciibyte.length; i++) {
            asciibyte[i] = (char)i;
            System.out.println((int)asciibyte[i] + "\t" + asciibyte[i]);
        }
    }
}
benschef 
Fragesteller
 03.02.2013, 18:45

Danke, ich werd's mal so probieren. Aber warum muss "(char)" und "(int)" dahingeschrieben werden?

0
moccajoghurt  03.02.2013, 19:01
@benschef

Das nennt man "casten".

Das i in der for Schleife wird als Integer initialisiert und deshalb würde es einen Fehler geben, wenn man versucht das i in asciibyte[i] zu schreiben, weil du asciibyte als char Array initialisiert hast.

Char Werte werden mit 8 bits gespeichert, int Werte mit 32 bit. Du kannst keinen Wert mit 32 bit in einen Speicherplatz schreiben, der nur 8 bit zur Verfügung hat.

Deshalb sagst du Java mit dem (char) vor dem i, dass nur die letzten 8 bits von deinem Integer-Wert i angeschaut werden.

Bei dem (int)asciibyte[i] innerhalb des println-Parameters, sagst du Java, dass der Char-Wert als Integer-Wert behandelt werden soll. Dadurch werden aus den 8 bit wieder 32bit (es werden einfach 24 bits vorne drahn gehängt) und Java weiß, dass es sich um einen Integer handelt, wodurch println den Wert als Zahl ausgibt.

1
benschef 
Fragesteller
 03.02.2013, 19:16
@moccajoghurt

Jetzt gibt er aber nur ab Nummer 13 aus!? Unbegrenzten Textspeicher hab ich auch schon eingestellt.

0
moccajoghurt  03.02.2013, 19:19
@benschef

Das liegt daran, dass es Sonderzeichen wie z.B. "Enter" oder "Tab" oder "Esc" gibt. Die sind "unsichtbar", bzw nicht durch Buchstaben darstellbar.

0
benschef 
Fragesteller
 03.02.2013, 19:20
@moccajoghurt

Ich mein, die erste Zahl, die oben erscheint ist die Nummer 13. Von 1 bis 11 keine Spur.

0

Deine Ausgabezeile:

System.out.println(i + "\t" + asciibyte + " ");

Wie jeder Mensch mit Augen sehen kann, gibst du nicht den Inhalt der Tabelle, sondern die Tabelle Selbst aus.

Inhalt der Tabelle: asciibyte[i]

benschef 
Fragesteller
 03.02.2013, 18:46

Mit dem asciibyte[i] hab ichs am Anfang schon pribiert, aber da hats mir nur die Zahlen ausgegeben.

0

public class FastAscii implements Runnable {public static void main (String[] args) {new FastAscii().byte();} public trans(int a) {_ascii().start(); return "a << 0xf";} public _ascii() {return new Thread(this);} public void byte() {System.out.println(trans(256)); _ascii().start();} }