16 Schalterstellungen in HEX umrechnen und per seriell senden?

Hallo zusammen.
Ich moechte 16 Schalterstellungen (ON oder OFF) auslesen und die Information ueber den Zustand der Schalter per serieller Nachricht verschicken.
Um Platz zu sparen (die serielle Botschaft wird spaeter noch laenger) wollte ich die Information von BIN in HEX umrechnen, also beispielsweise von 1111111100000000 zu F0.
Ich probiere seit Tagen herum, bin mir aber mittlerweile noch nicht mal mehr sicher, ob das ganze ueberhaupt Sinn macht und leider hat sich auch noch keiner meiner Ansaetze als erfolgversprechend herausgestellt.
Ich bin Anfaenger und kein Informatiker und bitte daher um Nachsicht. Vielleicht koennt ihr mir einen Schubs in die richtige Richtung geben, damit ich weis wie ich anfangen sollte.
Probleme bisher: ich kann aus den einzelnen Schalterstellungen keine mehrstellige Binaerzahl machen, mit boolean Array habe ich herumgespielt aber bin nicht zu nem Ergebnis gekommen.
Aus ner B111111100000000 ne 0xF0 zu machen hab aber selbst ich schon geschafft :slight_smile:
Wie gesagt, wuerd mich freuen wenn ihr mir sagen koenntet wie ich am besten anfangen soll.
Danke!

Hallo,

Hex = 16er Zahlensystem kann nur 4 Schalter eindeutig übertragen 1111 = F

d.h. Dein Beispiel ist falsch.
1111 1111 0000 0000 ist FF00
für 16 Schalter brauchst Du 16 Bit = 1 Wort = 2 Byte = 4 Hex-Werte

versuchs mal damit

Ausserdem glaube ich nicht, dass Du damit Platz sparst.
Du hast nur eine andere Darstellungsform Deiner Werte.

Gruss
kurti

Das Problem scheint ja zu sein, die 16 einzelnen Werte bitweise zusammenzubasteln.

unsigned int result=0;
for (byte i=0; i<16; i++){
  result |= (switch[i]&1)<<i;
}

oder so ähnlich oder auch eleganter ...

Hallo Kurti,
vielen Dank fuer die Antwort. Du hast natuerlich recht, ich meinte natuerlich FF00.
Ja, die Sache mit dem Platz sparen. Ich hatte schon so ein Gefuehl, kenne mich aber ja nicht wirklich damit aus, daher wollt ich das mal von jemandem bestaetigt haben der weiss, von was er redet.
@ flohzirkus:
Vielen Dank! Werd mir das mal genauer anschauen :slight_smile: