屏蔽c中不需要的位
给定二进制的71744474
,它是0100010001101011101111011010
我试图从这个小数中提取的是从低位开始的每七位。 七位中的每一位都表示可打印的ASCII字符,只能有7位。 总共我拉出四个字符。 第一个字符是1011010
,它是ASCII中的Z
下一个字符是w
等等。 我想有一种方法可以掩盖我关心一些事情的方式。
使用按位运算符:
0100010001101011101111011010 & 0000000000000000000001111111 = 1011010
要获得第二个角色,请执行
0100010001101011101111011010 & 0000000000000011111110000000
等等..
沿着这条线应该就足够了:
#include <stdio.h>
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;
}
它使用位移,将所需的特定位转换为值的最低有效位,并将位掩码清除所有其他位。
如果您运行该代码,您会发现它可以非常愉快地提取每个七位组中的单个ASCII字符:
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.
链接地址: http://www.djcxy.com/p/72607.html