Bitoperator & anwenden



  • Hallo,

    ich bekomme als Fehlermeldung, dass es sich bei folgender & Operation um ungültige Operanden handelt:

    char puffer = (char*) malloc(sizeof(char));
    char dreiBit;
    fread(&puffer, 1, 1, file); //1 Byte einlesen
    dreiBit = puffer & 111; //hier der Fehler

    ich bin an den ersten drei Bit des eingelesenen Bytes interessiert.

    Wo liegt der Fehler?

    Danke im voraus für Antworten!



  • Du weist einer char-Variable (keinem Zeiger) Speicher mit malloc() zu. Sollte so nicht wirklich funktionieren.



  • Außerdem wird die 111 dezimal interpretiert. Um die ersten 3 Bits zu maskieren, musst du die 7 nehmen.



  • Wenn du mit malloc Speicher reservierst musst du den auch in einem Zeiger speichern:

    char* puffer = (char*) malloc(sizeof(char));
    

    Da du aber nur einen Byte reservierst könntest du doch gleich

    char puffer;
    

    benutzen.

    dreiBit = puffer & 111; //hier der Fehler
    

    Es handelt sich um eine ungültige Operation da du mit der Adresse und nicht dem Inhalt operierst. Probier es so:

    char* puffer = (char*) malloc(sizeof(char)); 
    char dreiBit; 
    fread(puffer, 1, 1, file); //1 Byte einlesen 
    dreiBit = *puffer & 7; //mit *puffer wird der Inhalt angesprochen
    
    //oder so
    
    char puffer;
    char dreiBit; 
    fread(&puffer, 1, 1, file); //1 Byte einlesen 
    dreiBit = puffer & 7;
    


  • Aber ob es wirklich Sinn macht mit malloc() 1 (in Worten: ein) Byte zu reservieren 🙄

    Edit: Zudem ist der cast unnötig und sizeof(char) ist immer 1.


Anmelden zum Antworten