有人可以解释这个C函数吗?

Len*_*ann -1 c

我有这个语法的一些问题.有人可以向我解释这个C函数在做什么吗?

unsigned long protodec_henten(int from, int size, unsigned char *frame)
{
   int i = 0;
   unsigned long tmp = 0;

   for (i = 0; i < size; i++)
     tmp |= (frame[from + i]) << (size - 1 - i);

   return tmp;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jar*_*Par 15

我猜你在将以下行称为具有混乱语法的行.

tmp |= (frame[from + i]) << (size - 1 - i);
Run Code Online (Sandbox Code Playgroud)

让我们打破这个

  • frame [from + i]:"from"表示数组的初始索引,i只是当前的偏移量.所以这有效地从索引"从"开始迭代数组
  • size - 1 - i:这是根据当前索引计算要移位的位数.此数字将从大小-1开始,并随着循环的进行而减少
  • (frame [from + i] <<(size - 1 - i):这将值从+ i移位指定的位数
  • tpm | = ...:在迭代值移位后仍然可用的字节上的按位或表达式.

  • +1你是唯一一个详细解释他想要的东西 (2认同)
  • 是不是按指定的位数移动,而不是字节? (2认同)

vir*_*tor 7

其他已经描述过的每一行,所以我刚才添加的功能是什么.您可以想象在具有不同位置的"堆栈"上的frame位置(from)和(from+size)之间的字节.第一个字节将放在左侧.

bits from:      tmp: |    +  +     |(LSB-side of tmp)
frame[from]:           ---+----
frame[from+1]:          -----+--
frame[from+2]:           -+------
...
Run Code Online (Sandbox Code Playgroud)

现在,如果"下方"中的任何字节在相关位置设置了位,则tmp设置为位.