ASCII-Kodierung < Sonstiges < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:52 So 26.11.2006 | Autor: | Rudy |
Mojn.
Angenommen, das Spielergebnis von dem Spiel 4-Gewinnt wird in einer Datei gespeichert (mit X und O Steinen, sowie _ als leeres Feld) sieht in etwa so aus:
_ X O _ X X _ O _ X _ O _ O _ O _ X _ X X _ _ _ _ _
Ist ja jetzt auch egal, wie groß das Ding ist, wo man die Steine reintut. Es geht nur um folgendes, bei der ASCII-Kodierung wird ja immer 1 Byte für ein kodiertes Zeichen verwendet. Ich würde jetzt gerne wissen, wie man Speicherplatz in der Datei sparen kann.
Ich bin mir gerade gar nicht sicher, wie die ASCII-Kodierung aussieht, aber eigentlich müsste es doch möglich sein, statt dem 1 Byte nur 2 Bits zu benutzen... Aber wie weiter?
Muss ich den Zeichen X , O und Unterstrich dann binärzahlen zuweisen, also
00 = _
01 = O
11 = X
Und dann hätte ich in meiner Datei Quasi stehen für 0 _ X
01 00 11
Aber funktioniert das überhaupt so?
Könnte ich denn das nicht auch zu einem zusammenpacken, wenn ich _ _ _ _ habe? Ne, das geht wohl nich,oder?
Wünsche euch alles gute und hoffe mal auf einige Kommentare.
Danke Euch!!!
|
|
|
|
Hallo,
> Ist ja jetzt auch egal, wie groß das Ding ist, wo man die Steine reintut.
Nicht ganz. Wenn die Anzahl der Felder B*H durch 4 teilbar ist, dann geht die Kodierung immer schön auf, weil ja immer vier Doppelbits in ein Byte passen.
> Ich bin mir gerade gar nicht sicher, wie die ASCII-Kodierung aussieht, aber eigentlich müsste es doch möglich sein, statt dem 1 Byte nur 2 Bits zu benutzen...
Ja, kein Problem. Du verabschiedest dich dann von der ASCII-Kodierung, weil ja nur noch deine wenigen Zeichen verfügbar sind, was aber kein Problem darstellt.
> Muss ich den Zeichen X , O und Unterstrich dann binärzahlen zuweisen, also
> 00 = _
> 01 = O
> 11 = X
Ja genau (oder 10=X oder, oder...)
> Und dann hätte ich in meiner Datei Quasi stehen für 0 _ X
> 01 00 11
Bleibt nur die Frage, wie man das in die Datei hineinbekommt, denn die wird byteweise geschrieben. Auf jeden Fall nimmst du immer vier (s.o.) aufeinanderfolgende Zeichencodes a, b, c, d (z.B. 01, 00, 11, 01) und rechnest:
in C: codebyte = (a<<6) | (b<<4) | (c<<2) | d;
in Java: codebyte = 2^6*a + 2^4*b + 2^2*c + d;
Nun kannst du deine Datei byteweise beschreiben.
Falls die Anzahl der Felder nicht durch 4 teilbar ist, musst du beim Schreiben einen oder mehrere "Dummies" einfügen und sie beim Lesen wieder verwerfen.
> Könnte ich denn das nicht auch zu einem zusammenpacken, wenn ich _ _ _ _ habe? Ne, das geht wohl nich,oder?
Nun, du hast noch einen Code übrig, da du ja nur drei verbraucht hast (ich nehme mal die Kodierung "_ O X" = 00 01 10). Dem vierten Code kanst du auch eine feste Bedeutung zuweisen, z.B. "_ _" oder "_ _ _ _" oder "X X X" (was dir am sinnvollsten erscheint) oder eine kontextabhängige (vielleicht sogar sinnvoller?) wie :
"das Zeichen davor noch zweimal", was z.B. die Folge "X X X" als 10 11 kodieren würde, oder
"bis zum Ende der Zeile nur noch _", was zu Beginn des Spiel wohl viel bringen würde, aber mit größerem Füllstand nicht mehr so toll wäre.
Gruß
Martin
|
|
|
|