请问:unsigned long ip2=*(unsigned long*)("202.108.35.218") 然后ip2=775041074,怎么算的?

he_sl 2002-11-13 01:07:56
1、unsigned long ip2=*(unsigned long*)("202.108.35.218")
然后ip2=775041074,请问是怎么算的?

2、 unsigned long ip2=*(unsigned long*)("202.108.35.218");
in_addr tmp=*(in_addr*)&ip2;
ip2=inet_addr(inet_ntoa(tmp));

第一行代码完成后ip2=775041074;最后ip2还是=775041074。不知道后面两行代码有什么用?
...全文
20 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrlvls 2002-11-13
  • 打赏
  • 举报
回复
我怎么看都觉得结果应该是不同吧,除非是巧合

第一种方法根据Ascii码来算就行了
unsigned long有4个字节,因此
ip2 = '2'*1 + '0'*16 + '2'*16*16 + '.'*16*16*16

第二种方法中tmp和ip2里面的内容在内存中是相同的,
inet_ntoa把网络字节序转换成主机字节序,也就是tmp的内容是".202",但后面的内容是没有用的,而一个ip2是一个整数而不是指针,因此后面并不是"108.35.218",inet_addr取出来的东西应该是不确定的

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧