掩盖c中不需要的位

时间:2011-03-03 05:51:07

标签: c

给定二进制的十进制71744474,{I}我试图从这个十进制中提取的是从低位开始的每7位。七位中的每一位都表示可打印的ASCII字符,其只能有7位。我总共拿出四个字符。第一个字符是0100010001101011101111011010,在ASCII中为1011010。下一个字符是Z,依此类推。我想有办法掩盖我关心的一些事情。

4 个答案:

答案 0 :(得分:7)

使用按位运算符:

0100010001101011101111011010 & 0000000000000000000001111111 = 1011010

要获得第二个角色,请执行

0100010001101011101111011010 & 0000000000000011111110000000

依旧......

答案 1 :(得分:3)

有些事情就足够了:

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

它使用位移将所需的特定位获取到值的最低有效位7位,并使用位屏蔽来清除所有其他位。

如果您运行该代码,您会发现它可以非常高兴地以7位为一组提取单个ASCII字符:

Pax!

答案 2 :(得分:2)

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.

答案 3 :(得分:0)

#include <stdio.h>

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