Hier geht's doch um die SMS-Codierung, richtig?
Da werden die 7-Bit Zeichen nicht einfach in 8 Bit "zusammengeschoben" (das wär' ja zu einfach).
Die Erfinder waren offensichtlich der Ansicht, daß es hier um Telefonie geht und deshalb bloß nix verwendet werden darf, was es schon gibt und schon gar nix, was etwa einfach zu verstehen wäre

.
Die 7 Bit des ersten Zeichens werden "rechtsbündig" in das erste Byte geschrieben (so, daß das höchstwertige Bit unbenutzt bleibt). Dann werden die niederwertigsten Bits des nächsten Zeichen (für das erste Zeichen im String also das Bit 0) von links an die freien Stellen des vorherigen Zeichens eingeschrieben. Damit hat das zweite Zeichen nur noch 6 Bits (wird wieder rechtsbündig verschoben) und zwei höchstwertige Bits werden "frei". Da kommen dann die zwei niederwertigsten Bits des nächsten Zeichens hinein, das wieder nach rechts verschoben wird und so weiter.
Wenn Du also mit dem String "Hallo" hast:
Code: Alles auswählen
H a l l o
Hex: 0x48, 0x61, 0x6c, 0x6c, 0x6f
Binär: 01001000, 01100001, 01101100, 01101100, 01101111
Das höherwertigste (jeweils am weitesten links stehende) Bit ist in allen Zeichen unbenutzt.
Das "Zusammenschieben" geht jetzt folgendermaßen:
01001000 bleibt 01001000
Die niederwertigste 1 des nächsten Bytes wird an die höchstwertige Stelle des vorigen geschrieben:
11001000
Vom nächsten Byte ist jetzt noch 0110000 übrig (Bit 0 ist ja schon untergebracht), "links" sind jetzt zwei Stellen frei. Die werden wieder mit den niederwertigsten Bits des nächsten Bytes aufgefüllt:
00110000
Und so weiter. Einigermaßen klar?
Jetzt mußt Du nur noch das Programm drumrum basteln
Hilfestellung: man setzt ein Bit mit einer bestimmten Wertigkeit in einem Byte mit "oder":
Man löscht ein Bit mit einer bestimmten Wertigkeit, indem man es mit seinem Komplement "verundet":
P.S.: man bricht sich also bei SMSen die Ohren, nur um den String "Hallo" zu komprimieren. Komprimiert ist bei der Stringlänge noch gar nichts (die Kompression stellt sich erst beim 8. Byte ein, wenn die "Reste" vollständig in die freigewordenen Stellen passen). Eigentlich ein witziges, aber auch ineffektives Format. Wie man auf so was kommt, ist mir schleierhaft.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.