Salve,
sto' cercando di scrivere un programmino ma purtroppo mi ritrovo con questa difficolta':
non riesco a trovare il modo per scrivere/modificare singoli bit all'interno di un blocco di memoria allocato con malloc().
Riporto quanto fatto:
Codice PHP:
#include <stdlib.h>
#include <stdio.h>
main () {
// funzione per stampare i bits di un intero
void printbits(unsigned x){
if (x==0) printf("0");
else printbits(x>>1);
printf("%d",x&1);
}
/* bitcount: count 1 bits in x */
int bitcount(unsigned x)
{
int b;
for (b = 0; x != 0; x >>= 1)
b++;
return b;
}
// Funzione per settare ad 1 tutti i bit dell'intero passato come argomento
int setbitOn(int x)
{
for (; x != 0; x >>= 1)
x = x | 1;
return x;
}
int *A;
A = (int *) malloc(20);
printf("Garbage Contents: %d %d\n", A, sizeof(A) );
printf("Bits di A: ");
printbits(A); //stampa 0
printf("\n");
printf("Numero di bits in A: %d\n",bitcount(A)); //stampa 28!!
printf("Bits di A dopo setbitOn(): ");
printbits(setbitOn(A));
printf("\n");
printf("Garbage Contents(2): %d %d\n", A, sizeof(A) );
printf("\n");
free(A);
}
Il problema e' nella funzione setbitOn() che dovrebbe mettere ad 1 tutti i bit del blocco passato, ma che in realta' sembra non fare nulla!
Un altra cosa, ma se io ho allocato un blocco di memoria da 20 bytes puntato da *A, come e' possibile che quando vado a contare i bits contenuti in A ottengo 28??...non dovrei ottenere 160 bits??
Grazie mille!!