作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了 ping 的代码。我很困惑这段代码
*(u_char *)(&u) = *(u_char *)w ;
在这个函数中,我认为你的值为0,为什么要再次赋值。
/*
* I N _ C K S U M
*
* Checksum routine for Internet Protocol family headers (C Version)
*
*/
in_cksum(addr, len)
u_short *addr;
int len;
{
register int nleft = len;
register u_short *w = addr;
register u_short answer;
register int sum = 0;
/*
* Our algorithm is simple, using a 32 bit accumulator (sum),
* we add sequential 16 bit words to it, and at the end, fold
* back all the carry bits from the top 16 bits into the lower
* 16 bits.
*/
while( nleft > 1 ) {
sum += *w++;
nleft -= 2;
}
/* mop up an odd byte, if necessary */
if( nleft == 1 ) {
u_short u = 0;
*(u_char *)(&u) = *(u_char *)w ;
sum += u;
}
/*
* add back carry outs from top 16 bits to low 16 bits
*/
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return (answer);
}
最佳答案
&u
是指向u
的指针。
(u_char *)(&u)
是一个指向u
的u_char
指针。
*(u_char *)(&u)
取消引用该指针,因此
*(u_char *)(&u) = *(u_char *)w ;
将 w
中的第一个字节复制到 u
的第一个字节中。第二个字节为零。
(假设,正如该代码的作者所做的那样,short
是 16 位宽。根据 C 标准,这不一定是真的。)
关于c - 关于 ping 中的 check_sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8257019/
我已经阅读了 ping 的代码。我很困惑这段代码 *(u_char *)(&u) = *(u_char *)w ; 在这个函数中,我认为你的值为0,为什么要再次赋值。 /* *
我是一名优秀的程序员,十分优秀!