roger schrieb:
> So erhalte ich als Ausgabe +65425 bei -9.8 Grad
>
> sprintf(buffer, "%+d.%d ", temp /10, temp %10));
Das kann ja nicht sein. Da fehlt ja dann mindestens der "." bei der 
Ausgabe.
Prüfe mal, was in sensor_data[2] und sensor_data[3] steht, bzw. gibt 
diese Werte auch mal mit aus.
1  | int16_t temp;
  | 
2  | uint8_t sensor_data[4];
  | 
3  |  
  | 
4  | sensor_data[2] = 0x80;  // negativ
  | 
5  | sensor_data[3] = 98;    // 9.8°
  | 
6  | 
  | 
7  | temp = ((sensor_data[2] & 0x7F) << 8) | sensor_data[3];
  | 
8  | if (sensor_data[2] & 0x80) { // highest bit indicating negative temperature
 | 
9  |   temp = -temp;
  | 
10  | }
  | 
11  | 
  | 
12  | printf("%+d.%d ", temp/10, abs(temp)%10);
 | 
gibt bei mir "-9.8 " aus.
Kleiner Schönheitsfehler noch:
1  | sprintf(buffer, "%+d.%d ", temp /10, temp %10));
  | 
sollte besser
1  | sprintf(buffer, "%+d.%d ", temp/10, abs(temp)%10));
  | 
lauten, sonst hast du negative Vorzeichen auch vor den Nachkommastellen.