给定二进制的十进制71744474
,它是0100010001101011101111011010
我想从这个十进制中提取的是从低位开始的每七位。 七位中的每一位都表示可打印的ASCII字符,其只能有7位。 我总共拿出四个字符。 第一个字符是1011010
,它是ASCII的Z
下一个字符是w
,依此类推。 我在想有一种方法来掩盖我关心的一些方面。
使用按位运算符:
0100010001101011101111011010 & 0000000000000000000001111111 = 1011010
要获得第二个角色,请执行
0100010001101011101111011010 & 0000000000000011111110000000
等等..
根据这一点,应该足够了:
#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; }
它使用位移将所需的特定位获取到值的最低有效位7位,并使用位屏蔽来清除所有其他位。
如果你运行该代码,你会发现它可以很愉快地提取每个七位组的单个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.
#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; } }
以上就是c/c++开发分享掩盖c中不需要的位相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562397.html