16 Bit signed in 8 bit unsigned wandeln

Hallo zusammen,

ich suche eine möglichst *schnelle* Methode, in ANSI C einen signed-16-bit (little endian) integer in einen unsigned-8-bit integer umzuwandeln. Das blöde „signed“ macht mir stets einen Strich durch die Rechnung und es ist schon so spät … meine routine braucht einfach zu lange. Da muss es doch etwas in der Art „schiebe 8 bit nach rechts, addiere 1, schiebe 4 nach links und maskiere mit 0x0F0F“ geben :smile:

Danke für Hinweise!

Fritze

Ein unsigned 8bit kann 0 - 255 betragen, fällt der 16-bit-Wert in diesen Bereich, braucht man nur die überflüssigen Bits wegzulassen (also logisches UND mit 0x00FF). Für alle anderen Werte gibt es KEIN sinnvolles Ergebnis. Das eigentliche Problem ist also die Fehlerbehandlung, wenn obige Voraussetzung nicht sicher gegeben ist.

Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Peinlich peinlich
Hallo,

Ein unsigned 8bit kann 0 - 255 betragen, fällt der 16-bit-Wert
in diesen Bereich, braucht man nur die überflüssigen Bits
wegzulassen (also logisches UND mit 0x00FF). Für alle anderen
Werte gibt es KEIN sinnvolles Ergebnis. Das eigentliche
Problem ist also die Fehlerbehandlung, wenn obige
Voraussetzung nicht sicher gegeben ist.

Ähm, haben wir uns misverstanden? Selbstverständlich verliert man bei der Umwandlung i.a. Information. Mittlerweile ist mir auch die Lösung klar: +32768 (zum unsigned machen) und dann 8 Bit schieben, MSB auslesen, fertig.

Ganz schön peinlich, überhaupt nachzufragen. Ich geh wohl mal besser ins Bett :smile:

Gruß

Fritze

noch ne Korrektur …
Nur der Vollständigkeit halber:

Mittlerweile ist mir
auch die Lösung klar: +32768 (zum unsigned machen) und dann 8
Bit schieben, MSB auslesen, fertig.

Das muss natürlich Hi-Byte und nicht MSB heissen!

Gruß

Fritze