Mit 24 Bit Daten rechnen?

Gast #3630813
Lesenswert?
• ▲
▼
Hallo,

ich bekomme von einem Sensor vorzeichenbehaftet 24 Bit Messdaten zurück:

0x800000 = -8388608
0x800001 = -8388607
0xFFFFFC = -4
0xFFFFFF = -1

usw.

Wie kann ich nun in C damit unter Verwendung eines int32_t rechnen, 
insbesondere dividieren?

Für den Kompiler ist ja 0xFFFFFC nicht -4 sondern 16777212, somit ist 
auch das Ergenbis nicht -2, wenn man z.B. durch 2 dividiert. Wie 
funktioniert das?

Peterle
#3630875
Lesenswert?
• ▲
▼
Peterle schrieb:
> Das heißt 8 bit nach links schieben?

Ja das geht. Das ist der einfachste Fall.
Das entspricht einer Multiplikation mit 256.

Ansonsten geht dies.
[c]
int32_t tmp;

 tmp = messwert << 8;  //tmp ist messwert *256

//oder

 tmp = int32_t((uint32_t)messwert << 8) >> 8;  //tmp = messwert

//oder
 tmp = messwert > 0x007FFFFF ? messwert | 0xFF000000 : messwert;

//oder
 tmp = messwert & 0x00800000 ? messwert | 0xFF000000 : messwert;
//oder ...

[c]
Gast #3631682
Lesenswert?
• ▲
▼
Steffen Rose schrieb:
> Dachte, Messwerte werden generell linksbündig verwaltet, um
> unproblematisch

Nein, Hersteller von Sensoren denken sich scheinbar das 
kompliziertmöglichste Format aus und schreiben die 2 Zeilen C, die aus 
dem 17-relevante-Bits-irgendwie-auf-4-Byte-verteilt-Wert (mit Vorzeichen 
irgendwo in der Mitte) eine Zahl machen, generell nie ins Datenblatt, um 
die Anwender mental fit zu halten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren