最近在看《the shellcoder's handbook》这本书,对c的理解很深,但是最近遇到一段代码,看不懂。
这是一段代码:
char a[4];
unsigned int addr = 0x0806d3b0;
a[0] = addr & 0xff;
a[1] = (addr & 0xff00) >> 8;
a[2] = (addr & 0xff0000) >> 16;
a[3] = (addr) >> 24;
所以问题是这是做什么的,什么是 addr & 0xff(以及它下面的三行)以及是什么使 >> 8 成为它(我知道它将 8 除以 2)? Ps:如果您对我应该使用的标签有任何想法,请不要犹豫告诉我。
最佳答案
变量addr
是 32 位数据,而数组中的每个元素 a
是8位。代码所做的是复制 addr
的 32 位。进入数组 a
, 一次一个字节。
让我们走这条线:
a[1] = (addr & 0xff00) >> 8;
然后一步一步来。
-
addr & 0xff00
这将获取addr
中值的第 8 位到第 15 位。 ,运算后的结果为0x0000d300
. -
>> 8
这会将位向右移动,所以0x0000d300
变成0x000000d3
. - 将掩码和移位的结果值分配给
a[1]
.
关于c - a[0] = addr & 0xff 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33868998/