谁能以新手 C 程序员能够理解的水平解释此函数的作用?
unsigned getunsigned(unsigned char *bufp, int len) {
unsigned value = 0;
int shift = 0;
while (len--) {
value |= *bufp++ << shift;
shift += 8;
}
return value;
}
我想最让我头疼的是:
value |= *bufp++ << shift;
此外,任何人都可以提供一种方法来重写它,以便没有经验的 C 程序员能够更清楚地理解它吗?
我在为一项作业做研究时在网上找到了这段代码,除非我完全理解它在做什么以及它是如何做的,否则我不想使用它。
最佳答案
这是从 bufp
指向的缓冲区中获取连续的字节, 并将它们放入 value
.
value |= *bufp++ << shift;
正在取值 bufp
(即地址 char
指向的 bufp
指向)并将其与 value
的 8 位进行或运算.然后它递增 bufp
指向缓冲区中的下一个字节。之后,它将 8 添加到 shift
-- 这就是决定 value
的哪个 8 位的原因新字节得到 ORed。即 shift
从 0 开始,所以在第一次迭代中,bufp
的第一个字节替换 value
的低 8 位(替换,因为它们开始时为 0)。在下一个迭代器中,bufp
的下一个字节左移 8 个字节,以替换 value
的下一个 8 位,以此类推 len
字节。
旁白:如果len
大于 sizeof(unsigned)
, 这将写到 value
的末尾,导致未定义的行为。
关于c - 解释这个函数的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717359/