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

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

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

  1. linux下wait函数,Linux wait函数详解

    wait和waitpid出现的原因 SIGCHLD --当子进程退出的时候,内核会向父进程SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) --子进程退出时,内核将 ...

  2. linux哈希函数,OpenSSL下hash函数

    OpenSSL下hash函数:是不可逆的函数,它的输入可以是任意长度的字节流.它的输出是固定大小的,hash函数的作用就是给你的文件产生一个摘要,它是独一无二的. 通过OpenSSL提供FTP+SSL ...

  3. linux的scandir函数,linux C++ scandir 的使用

    () 头文件 #include () 函数定义 int scandir(const char *dir,struct dirent **namelist,int (*filter)(const voi ...

  4. linux c 绝对值函数,linux c 简介

    --- title: linux c 简介 date: 2020-07-19 updated: 2020-07-19 --- # Preface # todo linux c http://blog. ...

  5. linux使用模板函数,Linux常用C函数

    Linux常用C函数Tag内容描述: 1.Linux常用C函数 接口处理篇 accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #inclu ...

  6. linux i2c 读写函数,Linux下读写芯片的I2C寄存器

    要想在Linux下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章<手把手教你写Linux I2C设备驱动>已经做了初 ...

  7. linux下dup函数,Linux dup dup2函数理解

    在linux中,我们需要复制文件描述符,下面是我对文件描述符的理解 int dup(int fd); // 复制一个已经存在的文件描述符,如果成功,返回复制成功后的文件描述符,失败返回-1 int d ...

  8. linux中iconv函数,Linux下编码转换(iconv函数族)

    转自:http://www.linuxdiyf.com/viewarticle.php?id=45164 在Linux上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实 ...

  9. linux拷贝文件函数,linux下文件操作的各个函数

    作者:HoytEmail:hoytluo@21cn.com 前言: 我们在这一节将要讨论linux下文件操作的各个函数. 文件的创建和读写 文件的各个属性 目录文件的操作 管道文件 --------- ...

最新文章

  1. 经典设计模式——策略模式
  2. Error:Kotlin: Module was compiled with an incompatible version of Kotlin
  3. java实现一个gui面板_JAVA GUI自定义JPanel画板背景
  4. 随便说说程序员团队精神的荣辱与共
  5. linux模拟磁盘和用户管理总结
  6. java8 追加文字到文件_使用Stream-Java 8替换文件中的文本
  7. ubuntu上安装rsync+sersync
  8. Node-ES6模块化
  9. M文件打包成jar包详解
  10. 第16周项目3--用函数指针调用函数(吃饭,睡觉,打豆豆)
  11. 国内IDC数据中心星级评判标准怎么划分
  12. 【Flask】 Not Found: /favicon.ico 项目logo图标加载
  13. 2020-09-07-中国人寿两年java岗位一面
  14. 无线网技术——复习(2)
  15. 工程建设项目业务学习
  16. uni-app HBuilderX 工程转换 vue-cli 工程
  17. Linux xargs 命令
  18. 小白都能学会的Python基础 第二讲:Python基础知识
  19. oracle ALTER 用法
  20. 二阶龙格库塔公式推导_二阶龙格—库塔公式.PPT

热门文章

  1. xAxis. boundaryGap
  2. JAVA拦截器(Interceptor)实现以及原码示例
  3. 【LINGO】lingo 软件简介
  4. ubuntu20.04 安装 WPS 2019
  5. 怎么快速生成gif动图?三步完成gif合成
  6. 微信聊天框如何隐藏(微信教程分享)
  7. Maven的传递性依赖及其jar包冲突解决
  8. 破解还原卡的方法总结!! 1
  9. 使用jQuery实现返回顶部
  10. 腾讯QQ Linux版正式回归 支持x64、ARM64