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. ]


Anmelden zum Antworten