屏蔽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

上一篇: masking out unwanted bits in c

下一篇: "Isolate" specific Row/Column/Diagonal from a 64