bool variable in einem unsigned char schreiben



  • Hallo allerseits,

    ich habe einen (externen) Buffer unsigned char*

    pBuffer = new unsigned char[10000];
    

    und will darin an eine bestimte Stelle einen boolschen wert eintragen. Dafür habe ich eine Classe Segment erstellt die die aktuelle Bufferposition des Segments innerhalb des Buffers beinhaltet und will dort den boolschen Wert eintragen:

    class Segment{
     unsigned char* BufferPosition; // aktuelle Bufferpos
    
    public:
     void setValue(bool);
    }
    
    inline void Segment::setValue(bool Val){
    	*BufferPosition = static_cast<unsigned char>(Value & 0x00);
    }
    

    es scheint so nicht zu funktionieren ich sage der inhalt der Adresse BufferPosition = 0x01 falls bVal = true



  • "Value & 0x00" ist auf jeden Fall 0 (bit-und). Lass das &0x00 am besten weg, dann sollte etwas sinnvolleres rauskommen.



  • ja, danke erstmal. so ist es offenbar richtig, ich mache mir jedoch gedanken dass in den ersten 7 bits durchaus dann Datenmüll stehen kann, ausserdem gibt mir der compiler eine Warnung in der Ausgabefnktion:

    bool Segment::getValue(void)const{
    	return static_cast<bool>(*BufferPosition);
    }
    


  • Du könntest auch Bit-Operatoren verwenden, um 8 bool's in ein char zusammenzupacken:

    *buffer |= 1<<subind;//setzen
    *buffer &= ~(1<<subind);//rücksetzen
    
    bool val = (*buffer&(1<<subind))!=0;//abfragen
    

    ("subind" liegt zwischen 0 und 7 und gibt an, welches Bit du bearbeiten willst)

    PS: oder du verwendest einen vector<bool>.



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • oder nen bitset<bool>



  • darkstar2000 schrieb:

    ich mache mir jedoch gedanken dass in den ersten 7 bits durchaus dann Datenmüll stehen kann

    Die Sorgen sind allerdings unbegründet. bool kennt nur zwei Zustände. Dementsprechend gibt es auch nur zwei Ergebnisse bei einer Umwandlung in einen Ganzzahltyp, 0 und 1.

    darkstar2000 schrieb:

    ausserdem gibt mir der compiler eine Warnung in der Ausgabefnktion:

    Und das wäre welche?


Anmelden zum Antworten