enmascarando bits no deseados en c

Dado el decimal 71744474 en binario, es 0100010001101011101111011010 lo que estoy tratando de extraer de este decimal es cada siete bits a partir de los bits más bajos. Cada uno de los siete bits debe representar un carácter ASCII imprimible que solo puede tener 7 bits. En total estoy sacando cuatro personajes. El primer carácter es 1011010 que es Z en ASCII. El siguiente personaje es w y así sucesivamente. Estoy pensando que hay una manera de ocultar los bits que me importan de alguna manera.

Utilice operadores bitwise:

 0100010001101011101111011010 & 0000000000000000000001111111 = 1011010 

Para obtener el segundo personaje, haz

 0100010001101011101111011010 & 0000000000000011111110000000 

y así..

Algo en la línea de esto debería ser suficiente:

 #include  int main (void) { unsigned int value = 71184592; // Secret key :-) for (unsigned int shift = 0; shift < 28; shift += 7) printf ("%c", (value >> shift) & 0x7f); putchar ('\n'); return 0; } 

Utiliza el desplazamiento de bits para obtener los bits específicos que desea en los siete bits menos significativos del valor, y el enmascaramiento de bits para borrar todos los demás bits.

Si ejecuta ese código, verá que puede extraer con bastante alegría los caracteres ASCII individuales en grupos de siete bits cada uno:

 Pax! 
 int myN = 71744474; int mask = 0x7F7F7F7F; // 7F is 0111 1111, or 7 on bits. int result = myN & mask; char myBytes[4]; myBytes[0] = (char)((result & 0x000000FF); myBytes[1] = (char)((result >> 8) & 0x000000FF); myBytes[2] = (char)((result >> 16) & 0x000000FF); myBytes[3] = (char)((result >> 24) & 0x000000FF); // Now, examine myBytes[0-3], and I think they'll be what you want. 
 #include  int main() { int a = 71744474; a = a&0xFFFFFFF; // 1111111 1111111 1111111 1111111 while (a>0) { char b = a&0x7f; // 1111111 printf("%c", b); a = a>>7; } }