Hallo,
oh, vielen Dank, ist ja ganz schön Fehlerträchtig wenn man das nicht weis.
byte MSB = 0x88;
byte LSB = 0x88;
int _16bits = MSB << 8 | LSB;
long _32bits = MSB << 8 | LSB;
Serial.println (_16bits, BIN); Serial.println (_16bits, HEX); Serial.println (_16bits);
Serial.println (_32bits, BIN); Serial.println (_32bits, HEX); Serial.println (_32bits);
ergibt:
11111111111111111000100010001000
FFFF8888
-30584
11111111111111111000100010001000
FFFF8888
-30584
und
byte MSB = 0x88;
byte LSB = 0x88;
unsigned int _16bits = MSB << 8 | LSB;
unsigned long _32bits = MSB << 8 | LSB;
Serial.println (_16bits, BIN); Serial.println (_16bits, HEX); Serial.println (_16bits);
Serial.println (_32bits, BIN); Serial.println (_32bits, HEX); Serial.println (_32bits);
ergibt:
1000100010001000
8888
34952
11111111111111111000100010001000
FFFF8888
4294936712
Zwischen long und unsigned long lauert ja eine Böse Falle. Im HEX Format scheint es gleich zu sein. In BIN und DEZ jedoch nicht. Das ist das versteckte Vorzeichen was Du meinst?
unsigned int MSB = 0x88;
unsigned int LSB = 0x88;
unsigned int _16bits = MSB << 8 | LSB;
unsigned long _32bits = MSB << 8 | LSB;
Serial.println (_16bits, BIN); Serial.println (_16bits, HEX); Serial.println (_16bits);
Serial.println (_32bits, BIN); Serial.println (_32bits, HEX); Serial.println (_32bits);
ergibt:
1000100010001000
8888
34952
1000100010001000
8888
34952
Demnach würde es ausreichen wenn ich MSB/LSB oder was auch immer beim auslesen mit unsigned int deklariere?