Char UND Verknüpfen
-
Ich habe mal wieder eine Frage
Bisher habe ich immer 2 variablen & verknüpft!
jetzt will ich eine variable vom typ CHAR (also 8 Bit) mit dem binärcode "00000001" & verknüfen!
Wie mache ich das?
Erst dachte ich mir einfach ein char mit dem wert drinne zu machen! Aber 00000001 ist irgentwein sonderfall ( Zeichen = SOH )
Kann mir hier jemand helfen?THX
Dagsta
[ Dieser Beitrag wurde am 08.01.2003 um 12:25 Uhr von dagsta editiert. ]
-
Verschoben nach "ANSI-C".
-
Für binärwerte gibt es - meines Wissens - kein standardisierter Ausdruck. Hexadezimalwerte allerdings kannst du einfach mit z.B. 0x01 im Quelltext codieren.
-junix
-
also char & 0x01?
THX
-
öh ja, z.B. so:
char zeichen_char = 5; zeichen_char &= 0x01; /* Ab hier ist zeichen_char nichtmehr 5 sondern 1. da aus 0000 0101 (binär für 5) 0000 0001 (binär 1) wurde. */
0000 0101 (5) & 0000 0001 (1) ----------- 0000 0001 (1)
-junix
-
Also ich habe jetzt versucht ob das klappt aber irgentwas mache ich falsch!
if(byts[y] && 0x01 != 0)
sollte ja eigentlich prüfen ob der 1. Bit eine 1 ist! aber das macht er irgentwie nicht!
THX
Dagsta
P.S.:Hier der Code mit dem ich versuche den binärcode eines car zeichens in ein feld zu schreiben:
if(byts[y] & 0x80 != 0) bits[bitpos] = 1; bitpos++; if(byts[y] & 0x40 != 0) bits[bitpos] = 1; bitpos++; if(byts[y] & 0x20 != 0) bits[bitpos] = 1; bitpos++; if(byts[y] & 0x10 != 0) bits[bitpos] = 1; bitpos++; if(byts[y] & 0x08 != 0) bits[bitpos] = 1; bitpos++; if(byts[y] & 0x04 != 0) bits[bitpos] = 1; bitpos++; if(byts[y] & 0x02 != 0) bits[bitpos] = 1; bitpos++; if(byts[y] & 0x01 != 0) bits[bitpos] = 1; bitpos++;
[ Dieser Beitrag wurde am 08.01.2003 um 14:53 Uhr von dagsta editiert. ]
-
schonmal mit Klammern versucht ?
if((byts[y] & 0x40) != 0)Außerdem würde ich die 2er-Potenzen auch in ein Feld Packen und das ganze in einer Schleife ablaufen lassen. Hexadezimale darstellung wäre auch nicht unbedingt
notwendig gewesen (1,2,4,8...) tuts auch.
-
Es muß auch ohne Klammerung gehen, & bindet stärker als !=
Ich würds aber so machen:int bits[8]; int i; for (i = 0; i < 8; ++i) bits[i] = !!(byts[y] & (1 << (7-i)));
(das !! Konstrukt ist notwendig, weil ich für bits[] kein bool verwenden wollte)
[ Dieser Beitrag wurde am 08.01.2003 um 20:10 Uhr von Bashar editiert. ]
-
&& schon, & auch ?
-
hm ich dacht immer Vergleichsoperatoren binden so ziemlich am schwächsten und & ist einer der stärksten, würd sonst wenig Sinn machen.... aber in deinem Fall würdich dir lieber ne union empfehlen in dem Stil:
struct bitstruct { union { unsigned char BYTE; struct { unsigned bit1 : 1; unsigned bit2 : 1; unsigned bit3 : 1; unsigned bit4 : 1; unsigned bit5 : 1; unsigned bit6 : 1; unsigned bit7 : 1; unsigned bit8 : 1; }BIT; }; }; //dann einfach bitstruct test; test = 'c';
und in test.BIT.bit1 usw stehen die bits drin
[ Dieser Beitrag wurde am 10.01.2003 um 08:19 Uhr von dreaddy editiert. ]