integer mit bit-werten füllen
-
hi,
folgendes Problem:unsigned char var1 = 0;
unsigned char var2 = 1;
unsigned char var3 = 1;... usw. bis
unsigned char var7 = 0;
wobei als Wert nur 0 oder 1 in Frage kommt.
Ich möchte aus diesen acht Werten jetzt einen einzigen Integer Wert erzeugen,
je nach den Werten von var1 bis var7.also z.B. 128 für 10000000 (bits aus obigen variablen)
weiß jemand wie und ob das geht? Oder eine Idee für einen workaround?
vielen Dank im Voraus,
oli
-
sollen var1-var7 die einzelnen stellen symbolisieren?
Wenn ja:Einfach die einzelnen variablen so erhöhen, dass du die "1" an der richtigen position hast und dann bitweise verknüpfen.
Alternativ gabs glaubich auch ne möglichkeits Bits zu schieben.
Du setzt also das erste bit je nachdem was var1 beinhaltet und schiebst dann alles eins weiter. Dann setzt du das 2. usw usf.für genaueres sind nun die zuständig die sich damit auskennen *gg*
-
Hallo!
Hatte genau so ein Problem Rückwärts gesehen. Ich musste aus einem Integer Wert die Bits auslesen!
Also Dein Problem kann man so machen:
. . . intVar = 0; // alle Bits auf 0 gesetzt for (n=0; n<16; n++) { if (var[n] = 1) intVar = intVar + 1; intVar = intVar >> 1; //Bitweise nach rechts schieben! } . . .
Das funktioniert bei einem 16 Bit Integer, wobei die Variable
intVar -> diese 16Bit Integer Variable
var[n] -> deine Variablen var1, var2 als Array definiert sindzu einer Abfrage kannst Du genauso vorgehen:
. . . for (n=0; n<16; n++) { if (1 & intVar) var[n] = 1; intVar = intVar >> 1; //Bitweise nach rechts schieben! } . . .
Hoffe Dir hilfts, viel spaß weiterhin
-
genau,
müsste zwar eigentlich var0 bis var7 heißen (sorry),
aber die sollen die einzelnen Bits repräsentieren.merci,
oli
-
Warum denn alles so umständlich, wenn es doch eh so schöne Sachen wie structs und unions gibt??
struct bits { int bit0:1; int bit1:1; int bit2:1; int bit3:1; int bit4:1; int bit5:1; int bit6:1; int bit7:1; int dummy:8; }; union intbit { int zahl; struct bits bitzahl; };
-
@AJ, Dann hängst du aber von der Größe von int ab.
Warum nicht das Bit holen durch "byte & 1 << bytenummer" und setzen durch "byte |= 1 << bytenummer"?
-
mastah
******von welchem int überhaupt...ich seh da nur char (bits von 0-7)
bye
-
@mastah
Dann hald so:struct bits { char bit0:1; char bit1:1; char bit2:1; char bit3:1; char bit4:1; char bit5:1; char bit6:1; char bit7:1; }; union intbit { char zahl; struct bits bitzahl; };
Man könnte auch anstatt int einfach short verwenden, dann bleibt die Größe auch immer gleich.
Warum ich nicht das Bitverschieben hernehmen würde? Weil das Rechenzeit kostet. Und warum sollte man Rechenzeit verschwenden, wenn es doch viel einfacher und schneller geht?