linux下inet_addr函数,Linux下两个网络函数inet_addr和inet_network (2008-09-01 01:42)

先看看这两个函数的真面目,在说说我遇到的问题

unsigned int inet_addr(const char *cp);

unsigned int inet_network(const char *cp);

两个函数都是将字符ip转化成二进制地址

但是,前面一个是要考虑大小端的,如果机器本身是小端在前的话,对于255.0.0.0,前者的转化结果将会是0xff,而不是实际想得到的0x000000ff,当然这两个值本身意义上是一样的.

最近做一个通过ip和mask得到网段的函数,就在x86和ixp425上遇到 inet_addr的大小端问题,最后用inet_network给屏蔽了,因为后者是主机序列,不管机器的大小端.

贴如下代码

1输入mask 得到掩码位数

#include "stdio.h"

int main(int agrc,char *argv[])

{

int i = 0;

printf("%s\n",argv[1]);

unsigned int prefix = inet_addr(argv[1]);

printf("%x\n",prefix);

while (((prefix)& 0x1) == 0){

i++;

printf("%d\n",i);

prefix = prefix>>1;

}

return 32 - i;

}

输入255.255.255.0

在大端的模式下得到掩码位数是24

小端模式下无效

2通过输入ip 和mask 得到网段

#include "stdio.h"

int main(char agrc,char *argv[])

{

int i,x;

printf("%s\n",argv[1]);

printf("%s\n",argv[2]);

unsigned int ip = inet_network(argv[1]);

unsigned int prefix = inet_network(argv[2]);

printf("%8x  %8x\n",ip,prefix);

x=0;

for(i=0;i<32;i++)

{

if(((prefix)& 0x1)== 0)

{

x++;

printf("%d %x\n",x,0x1<

ip &=(0xffffffff<

prefix = prefix>>1;

}

else

break;

}

printf("%x\n",ip);

return 0;

}

因为是主机序 所以没有大小端 任何机子都是一样的

输入192.168.0.1 255.255.255.0

得到192.168.0.0

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值