📄 subject_62577.htm
字号:
<p>
序号:62577 发表者:可爱 发表日期:2003-11-27 15:14:25
<br>主题:关于 PING
<br>内容:<BR>void CPing::FillICMPData(char *icmp_data, int datasize)<BR>{<BR> IcmpHeader *icmp_hdr = NULL;<BR> char *datapart = NULL;<BR><BR> icmp_hdr = (IcmpHeader*)icmp_data;<BR> icmp_hdr->i_type = ICMP_ECHO; // Request an ICMP echo<BR> icmp_hdr->i_code = 0;<BR> icmp_hdr->i_id = (USHORT)GetCurrentProcessId();<BR> icmp_hdr->i_cksum = 0;<BR> icmp_hdr->i_seq = 0;<BR> <BR> datapart = icmp_data + sizeof(IcmpHeader);<BR>}
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:可爱 回复日期:2003-11-27 15:23:35
<br>内容:上面是一段PING程序中填充IcmpHeader报文的代码!我想请问一下各位大虾datapart = icmp_data + sizeof(IcmpHeader)这句代码是什么意思?datapart是char类型,icmp_data被强制转换为IcmpHeader*,而sizeof(IcmpHeader)应该返回的是IcmpHeader的大小,他们为什么可以写成datapart = icmp_data + sizeof(IcmpHeader)啊?谢谢!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dstwwx 回复日期:2003-11-27 15:37:02
<br>内容:获得datapart的起始地址,是根据icmp_data增加一个偏移计算得到的。<BR><BR>这是典型的指针操作。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:可爱 回复日期:2003-11-27 19:36:23
<br>内容:你能不能说得详细点啊?谢谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:dstwwx 回复日期:2003-11-27 19:56:22
<br>内容:这还不详细吗?<BR>可能你对指针的概念还不是很熟悉。<BR><BR>找本C/C++的书看一下就明白了。<BR><BR>//内存中要利用的数据分两部分,前面是icmp_header,icmp_data代表了它在内存中的开始地址,用sizeof获得它的长度,现在跳过这个数据块,就到了datapart的开始地址。<BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:可爱 回复日期:2003-11-27 23:33:30
<br>内容:哦,懂了,非常感谢!我还想问一下,char *icmp_data为什么可以强制转换为 (IcmpHeader*)icmp_data啊?char *还可以强制转换成其他类型吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dstwwx 回复日期:2003-11-28 08:10:56
<br>内容:实际上icmp_data的内容应该就是一个IcmpHeader结构,在作为函数传人的时候,为了方便,就转换成了char*类型,现在是再转换回去。<BR><BR>转换的时候,会按照IcmpHeader的结构变量填充数据。是按照变量的顺序和类型进行从前到后对应的。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:可爱 回复日期:2003-11-28 12:12:31
<br>内容:真的谢谢!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -