解释这个功能的作用

Jus*_*ble 1 c

任何人都可以解释,在新手C程序员能够理解的水平上,这个函数的作用是什么?

unsigned getunsigned(unsigned char *bufp, int len) {
    unsigned value = 0;
    int shift = 0;
    while (len--) {
        value |= *bufp++ << shift;
        shift += 8;
    }
    return value;
}
Run Code Online (Sandbox Code Playgroud)

我想让我最难以绕过的那条线是:

value |= *bufp++ << shift;
Run Code Online (Sandbox Code Playgroud)

此外,任何人都可以提供一种重写方法,以便没有经验的C程序员更清楚地理解吗?

我在为作业进行研究时在线发现了这段代码,除非我完全理解它正在做什么以及它是如何做的,否则我宁愿不使用它.

Jer*_*fin 5

这是从指向的缓冲区中获取连续的字节bufp,并将它们放入value.

value |= *bufp++ << shift;正在处的值bufp(即,char在该地址bufp所指向),并用8位或运算它value.然后它递增bufp到指向缓冲区中的下一个字节.之后,它增加了8 shift- 这就是确定哪些 8位value新字节得到ORed的原因.即,shift从0开始,所以在第一次迭代中,第一个字节bufp替换了底部的8位value(替换,因为它们开始为0).在下一个迭代器中,下一个字节的bufp左移8字节,以替换接下来的8位value,依此类推len字节.

旁白:如果len大于sizeof(unsigned),则会写入结束value,导致未定义的行为.