Zwei Bytes verbinden

Irgendwie scheint heute der Wurm drin zu sein…

Kann mir bitte jemand schnell weiterhelfen wie ich zwei bytes uin8t in ein neues byte uin16t umwandle ? Bei mir kommt nur Murks raus. Dacht es würde so gehen :

byte a =11111111;
byte b =00011111;

void setup() {

 Serial.begin(9600);
 int unsigned combined = a << 8 | b;
 Serial.println(combined,BIN);


}

void loop() {
 
 

}

Ergebnis : 1100011101001001 sollte ja aber : 1111111100011111, sein

Beste Grüße

Die Literale falsch deklariert. Korrekt:

byte a = 0b11111111;
byte b = 0b00011111;

Wenn du Binär willst, dann sage das auch. Der Compiler kann nicht raten was du meinst. Wenn man das nicht macht gibt eine führende Null an dass das eine Oktal-Zahl ist

Ein Cast beim Schieben ist wohl nicht nötig, weil der Compiler automatisch in int rechnet, aber schadet nichts:

unsigned int combined = (unsigned int)a << 8 | b;

Wenn du z.B. mal was mit unsigned long machst wäre das die nächste Fehlerquelle

Bedankt!

byte a =11111111; // 0xC7
byte b =00011111; // 0x49

uint16_t combined = a<<8 | b; // 0xC749 

 Serial.println(combined,BIN); // 1100011101001001

ist doch richtig ?

Oder andersrum : warum schreibst du nicht

byte a = 0xFF;
byte b = 0x1F;