任何人都可以解释,在新手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程序员更清楚地理解吗?
我在为作业进行研究时在线发现了这段代码,除非我完全理解它正在做什么以及它是如何做的,否则我宁愿不使用它.
这是从指向的缓冲区中获取连续的字节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,导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |