有人可以解释这段代码的作用吗
size = *(int *)data; // size of string plus header word
off = (size + 3) & ~3;
chan = *(int *)(data + off);
data[size] = '\0'; // zero terminate
我认为这与将数据设为4的倍数有关?
答案 0 :(得分:3)
假设data
是char*
...
size = *(int *)data; // size of string plus header word
data
被解释为指向int
的指针,然后取消引用并分配给size
。
off = (size + 3) & ~3;
这会将size
向上舍入到最接近的4的倍数,并分配给off
。
chan = *(int *)(data + off);
chan
的值显然位于off
的{{1}}个字节。
data
那是显而易见的。
答案 1 :(得分:1)
此行将data
强制转换为指向int
的指针,并取消引用指针并将值存储在名为size
的变量中:
size = *(int *)data;
此行获得大于或等于size
的四个最小倍数,并将结果赋给变量off
:
off = (size + 3) & ~3;
此行从指针int
获取sizeof(char) * off
值偏移data
个字节,并将结果存储在chan
中:
chan = *(int *)(data + off);
此行为空终止内存块:
data[size] = '\0';
所以看起来size
是一块内存块,其中sizeof(int)
的{{1}}个字节可以被认为是data
,表示int
记忆块显然,size
加上data
有有意义的数据。如果不知道sizeof(char) * smallestmultipleoffourlargerthan(size)
的详细信息,我们可以说这是最好的。
答案 2 :(得分:0)
在Jason的回答的基础上,看起来这段代码将数据结构的内容分开,其结尾存储在data
。存储在那里的数据结构似乎是这样的格式:
{
int size;
char data[(size + 3) & ~3];
int chan;
}