Problem beim Umrechnen

Gast #2467741
Lesenswert?

Ich habe hier ein Problem beim Umrechnen einer short-Variable.

short value1;
short value2;


value1 = (((short)(buf[2])<<8) + ((short)(buf[3])));    //[2][3] 
//Luftfeuchte
value2 = (((short)(buf[4])<<8) + ((short)(buf[5])));    //[4]][5] 
//Temperatur

Diese zwei Werte, die ich von einem Mikrocontroller auf den PC 
übertragen habe, möchte ich nun umrechnen in eine physikalische Einheit 
und anschließend ausgeben.

RH = value1 * 100/ 2^14;
T = ((value2 * 165) / 2^16) - 40;

printf("T: %d     ", RH);
printf("RH: %d     ", T);

Bisher bekomme ich hierfür jedoch keine richtigen Ergebnisse. Was ist 
daran falsch? Ich habe leider recht wenig Erfahrung mit den 
verschiedenen Datentypen.
Moderator #2467924
Lesenswert?

DirkB schrieb:
> Da ist es besser du schreibst die richtigen Konstanten hin: 8192 und
> 65536

Nee, so etwas lässt man besser den Compiler rechnen, zumal dieser auch
weniger Fehler macht (2¹⁴ ist 16384 und nicht 8192 ;-) ).

In diesem Fall
1
RH = value1 * 100/ 2^14;
2
T = ((value2 * 165) / 2^16) - 40;

würde ich aber einfach schreiben:
1
RH = value1 * 100 >> 14;
2
T = (value2 * 165 >> 16) - 40;

Bei der Extraktion von short-Werten aus den Pufferbytes hast du es ja
ebenso gemacht.

Übrigens würde ich in
1
value1 = (((short)(buf[2])<<8) + ((short)(buf[3])));
2
value2 = (((short)(buf[4])<<8) + ((short)(buf[5])));

ein paar der Klammern weglassen. Manchmal dienen Klammern der besseren
Übersichtlichkeit, zuviele verderben sie aber wieder. So viele hätten
gereicht:
1
value1 = (short)(buf[2]<<8) + (short)buf[3];
2
value2 = (short)(buf[4]<<8) + (short)buf[5];

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