IP地址字符串转换整数的问题

sxmines 2003-12-10 10:12:35
请问各位
我用inet_addr()函数讲一个IP字符串转换为整数,为什么不对?
代码如下:
CString strIP;
strIP = "192.168.0.27";
unsigned long i = 0;
i = inet_addr(strIP);
得到的i值为 453 028 032 ,应该是 3 232 235 547
我还发现一个问题,
就是如果 strIP=1.0.0.0 ,则得到的i值为1;
如果strIP=2.0.0.0 ,则得到的i值为2;
也就是说inet_addr()函数得到的值是反的,
我使用十六进制方式查看i的值的时候,也是这样
即i=0x1b00a8c0,实际上i应该等于0xc0a8001b
刚好是相反的,为什么呢?是inet_addr()函数我用的不对吗?
...全文
1230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxmines 2003-12-10
  • 打赏
  • 举报
回复
谢谢各位,搞定了
i = inet_addr(strIP);
i = htonl(i);
就可以得到正确的值。
codelover 2003-12-10
  • 打赏
  • 举报
回复
搂主还真是细心,这都被你发现了。inet_addr()返回的结果是正确的,
intel平台下的字节顺序使用的是little endian,他的意思是整数的低位存储在
内存里面的低地址。而网络里面存储叫做big endian,和little endian相反,他的
整数的高位存储在低地址。
你把inet_addr()返回的整数倒过来看就正确了。
或者你用htonl,ntohl可以在这两种顺序之间转换。
bohut 2003-12-10
  • 打赏
  • 举报
回复
htonl()
用这个函数
cnstar9988 2003-12-10
  • 打赏
  • 举报
回复
用下面的代码看看。
int n1,n2,n3,n4;
n1 = n2 = n3 = n4 = 0;
sscanf(str,"%d.%d.%d.%d", &n1, &n2, &n3, &n4);
下面该怎么算,应该会了吧?
sxmines 2003-12-10
  • 打赏
  • 举报
回复
不是,不是
我不是用sockaddr_in结构用的
我是要把Ip地址转换为32位的整数,想知道有没有函数可以直接转
就好像
"192.168.0.27" = 192*256*256*256 + 168*256*256 + 0*256 + 27
我要的是转换后的整数,呵呵
就好象IPAddress控件的 CIPAddressCtrl::GetAddress() 函数一样
ISunwu 2003-12-10
  • 打赏
  • 举报
回复
是阿。支持楼上的。楼主别想多了。
topwork 2003-12-10
  • 打赏
  • 举报
回复
inet_addr会把IP地址转换为网络续,这就可以了呀,sockaddr_in结构里面的IP地址就要这个结果,还需要别的整型么,干什么用?

18,356

社区成员

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

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