Bei dem Bit-Geschiebe, was du da machst blicke ich nicht durch. Was ist denn das für ein Chaos. Wieso eine Fallunterscheidung, wenn das höchstwertige Bit des ersten Zeichens 1 oder 0 ist? Und dann tauschst du nur die Reihenfolge der beiden Bytes in der Case-Struktur.
Aber es fehlt IMHO noch ein paar wichtige Infos:
1. Nehmen wir an, dass immer 2 Bytes im Binärformat gesendet werden. Wie Lucki schon sagt, muss dann aber der Termination-Char auf FALSE stehen.
Aber welches Byte der 12bit-Zahl wird zuerst gesendet? Das niederwertige Byte, wo dann alle 8bits gesetzt sein können? Oder das höherwertige Byte, in dem dann eigentlich maximal die vier niedrigsten Bytes gesetzt sein können, die 4 hochwertigen Bits sollten immer Null sein.
2. Wie unterscheidest du, ob du gerade das MSB oder das LSB empfangen hast?
In Ergänzung zu Lucki also noch hier, je nachdem, welcher Zeichen das MSB ist (oben MSB wurde zuerst empfangen, unten LSB zuerst empfangen):
Gruß, Jens