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; } }