Chinaunix首页 | 论坛 | 博客
  • 博客访问: 388942
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: LINUX

2017-05-10 22:13:45

具体的原理相关的看下面的网址
http://blog.csdn.net/perddy/article/details/3137637

下面是C语言代码的实现:

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. #define _IPV4_VAL_(addr3,addr2,addr1,addr0) ((((unsigned long)addr3 << 24) & 0xFF000000) | (((unsigned long)addr2 << 16) & 0xFF0000) | (((unsigned long)addr1 << 8) & 0xFF00) | (((unsigned long)addr0) & 0xFF))
  3. #define _IPV4_BYTE_(val, index) ((val >> (index * 8)) & 0xFF)

  4. int main(int argc,char **argv)
  5. {
  6.     int ret_val = -1;
  7.     unsigned char ip_addr[4] = {192,168,4,100};
  8.     unsigned char ip_mask_addr[4] = {255,255,255,0};
  9.     unsigned long ip_addr_ = _IPV4_VAL_(ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]);
  10.     unsigned long ip_mask_addr_ = _IPV4_VAL_(ip_mask_addr[0], ip_mask_addr[1], ip_mask_addr[2], ip_mask_addr[3]);

  11.     unsigned char brocast_ip_addr[4];
  12.     unsigned long brocast_ip_addr_ = _IPV4_VAL_(ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3]);
  13.     int index = 0;

  14.     for(index = 0; index < 32; index++)
  15.     {
  16.         if(ip_mask_addr_ & (1 << index))
  17.         {
  18.             break;
  19.         }
  20.         brocast_ip_addr_ |= (1 << index);
  21.     }

  22.     brocast_ip_addr[0] = _IPV4_BYTE_(brocast_ip_addr_, 3);
  23.     brocast_ip_addr[1] = _IPV4_BYTE_(brocast_ip_addr_, 2);
  24.     brocast_ip_addr[2] = _IPV4_BYTE_(brocast_ip_addr_, 1);
  25.     brocast_ip_addr[3] = _IPV4_BYTE_(brocast_ip_addr_, 0);

  26.     printf("brocast_ip_addr:%d.%d.%d.%d\n", brocast_ip_addr[0], brocast_ip_addr[1], brocast_ip_addr[2], brocast_ip_addr[3]);

  27.     return 0;
  28. }

阅读(640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~