(unsigned) char als Zahl
-
Hallo auch,
ich habe mal
den dumme Frage.Eine Programm überträgt auf der seriellen Schnittstelle eine 16bit lange Zahl in 2 Zeichen. Die zu übertragende Zahl ist 15bit (0...14) + 1bit(15) für das Vorzeichen.
Das höchste bit ist also das Vorzeichen.Wie wandele ich sowas am schlauesten in einen Integer?
Momentan (falsch)
Es gibt einen string
string[0] //Bits 8 bis 15
string[1] //Bits 0 bis 7int i = singed char(string[0])*256+unsigned char(string[1])
Warum geht das nicht richtig;

Grüße
-
Dein Problem ist, daß negative Zahlen üblicherweise im Zweierkomplement dargestellt werden - und indem du das untere Bit der Zahl als unsigned char interpretierst, zerlegst du die Hälfte der Komplement-Darstellung.
Als Lösung könntest du den String zunächst (ohne Rücksicht auf das Vorzeichen) in einen unsigned short packen und den nach int konvertieren. Oder du verwendest Bit-Operatoren (short x=(s[0]<<8)|s[1]).
(btw, ein int besteht afair aus 4 Byte)
-
Aber das sign-Bit sollte er doch schon erstmal ausmaskieren und das Ergebnis dann mit (-1) multiplizieren.
-
Dippl Insch schrieb:
Wie wandele ich sowas am schlauesten in einen Integer?
1. sende das 15-bit wort als 2 bytes.
2. beim empfänger schiebst du es zusammen (ergibt ein 16-bit wort)
3. kopiere bit 14 des 16-bit worts nach bit 15.
4. setze bit 14 auf 0weiss nicht ob das am schlauesten ist, aber sollte funzen...