Entwickler-Ecke

Algorithmen, Optimierung und Assembler - 4 bytes in eines


retnyg - Mi 09.02.05 15:37
Titel: 4 bytes in eines
Das Alphabet umfasst 26 Zeichen, 29 wenn man öüä mitnimmt.
das ganze mal 2 (man braucht Gross/Kleinbuchstaben), wären 58.
so nun noch .,;:!? hinzu und wir haben 64 zeichen. damit sollte man jeden deutschen text darstellen können (aufs scharf-s verzichte ich aus platzgründen.

sooooo.... 64 * 4 = 256, also kann man rein theoretisch 4 "Deutsch-Bytes" in ein Byte packen.

angenommen unser text ist 'blub'
b wäre dann 2
l 12
u 21

unser DB (deutschbyte) wäre also 2,12,21,2

das db wäre so aufgegliedert:

000..063 : DB1
064..127 : DB2
128..191 : DB3
192..255 : DB4

so, wenn man jetzt aber ein byte in 4 teile aufsplittet hat man noch 2 bit pro teil.
mit 2 bit kann man aber nur 4 verschiedene zustände anzeigen.

man könnte jetzt also die werte des deutschbytes zusammenzählen, summe wäre beim beispiel 37.
:arrow: blöderweise weiss ich jetzt aber nicht mehr, welches DB wie lange ist.

gibts es eine mathematische möglichkeit, das umzusetzen, so dass man die einzelnen 4 werte aus dem byte extrahieren kann ?


AXMD - Mi 09.02.05 15:40

Achtung! 64 Zeichenmöglichkeiten = 6 Bit. 8 machen ein Byte aus. Nix also mit 6*4 = 8 ;)

AXMD


I.MacLeod - Mi 09.02.05 15:43

Du schmeißt hier alles durcheinander. Ein Byte hat 8 bit (Zahlenbereich 0..255). Der Zahlenbereich 0..63 lässt sich durch 6 bit darstellen, du könntest also 4 Zeichen in 3 Bytes unterbringen.

Zitat:
gibts es eine mathematische möglichkeit, das umzusetzen, so dass man die einzelnen 4 werte aus dem byte extrahieren kann ?


Ja, aber nur wenn du dich auf 4 Zeichen beschränkst :-P

Ansonsten kannst du dir mal shl/shr und or/+ angucken.


uall@ogc - Mi 09.02.05 15:44

hättest dann ja ne tolle komprimierung gefudnen (aber ich behaupte aml es geht nicht) sonst könntest auch bei 1 byte immer alles zusammen rechnen

z.b. haste #23#12#120#2#3#2#1#1#3 -> 167

das könnte man als 1 byte abspeichern aber draaus kommste nie mehr zum anfang, selbst wenn wüßtest das du 9 bytes hast

in deinem fall kann ja auch 2,12,21,2 -> 1,12,21,3 sein etc.
wenn das gehen würde könntest also immer weiter komprimieren


AXMD - Mi 09.02.05 15:47

Falls du so eine Methode implementierst rat ich dir, sie zum Patent anzumelden :twisted:

AXMD


MitschL - Mi 09.02.05 17:18

Hm,

ich würde : oder ; weglassen und ein Leerzeichen erlauben. :)
Aber das nur mal so am Rande...

gegrüßt!