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