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