您的位置:知蚁博客 » C/C++程序设计 » 用struct和union来保存IP地址

用struct和union来保存IP地址

作者: 发布时间:2011-05-21 分类:C/C++程序设计 标签: 7,982人浏览

  前面说过struct和union的区别,文中我们分别介绍了struct和union的特点,今天我们就说说struct和union的一个用法。下面有情另外一个主角:IP地址。

  IP地址是给链接在Internet上的每个主机分配的一个32bit的地址,按照TCP/IP协议规定,IP地址用二进制来表示,长度为32bit,也就是4个字节。但是由32个0或者1组成的字符串谁看了都会晕,因此为了方便使用,IP地址实际采用点分十进制的表示形式,中间用符号’.'来分开,于是就有了现在的形式,例如“192.168.2.1”,怎么样,好记多了吧。

  也许大家要问了,这个好像和struct、union没什么关系吧,知蚁说,这个关系可以有!先看一段代码:

#include “stdio.h”

union letuknowit
{
    struct t_ip
    {
        unsigned char a;
        unsigned char b;
        unsigned char c;
        unsigned char d;
    }tip;
    unsigned int nip;
};

void main()
{
    letuknowit ip;

    ip.tip.d = 192;
    ip.tip.c = 168;
    ip.tip.b = 2;
    ip.tip.a = 1;

//    ip.nip = 192*256*256*256 + 168*256*256 + 2*256 + 1;

    printf(“ip.nip=%u,ip=%d.%d.%d.%d”,ip.nip,ip.tip.d,ip.tip.c,ip.tip.b,ip.tip.a);
}

输出结果为:ip.nip=3232236033,ip=192.168.2.1

  这里我们定义了一个union类型来保存IP地址,union的其中一个成员是struct,struct有四个成员,分别表示IP地址中的每一段,这样我们用4个字节的空间就保存了一个IP地址,而且可以方便的取出IP地址中的每一段而不用做任何的计算。

  上面代码中ip.nip是以int型表示的ip地址形式,当需要进行ip地址判断的时候,直接进行一次整形比较就行,不用一段一段的进行比较或者进行字符串比较了。


原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/82

相关文章

30访客评论 ,博主回复20

  1. Hard Hard Study。

    • Good good study,day day up!

      知蚁05-21 22:37 回复
  2. 过来看看了,不错不错

    太子虹05-22 00:07 回复
  3. 过来看看了
    又是代码

    宋若愚05-22 10:20 回复
    • 可以去看微博客嘛

      知蚁05-22 13:00 回复
  4. 我也烦代码啊!呵呵

    随梦05-22 10:30 回复
    • 为啥只盯着最新的一篇文章呢?

      知蚁05-22 13:01 回复
  5. 现在IPV6的慢慢普及,会不会有影响

    一苇05-22 10:33 回复
    • IPV6好像就得另想办法了

      知蚁05-22 12:59 回复
  6. 这个不太明白

  7. 又学习了一招

  8. 过来瞧瞧,希望回访哦。

  9. 发现我适合浏览你的轻博客

    1000china05-22 15:52 回复
    • 那太好了,终于有人能看懂了,呵呵

      知蚁05-22 19:55 回复
  10. 学习了招新的! 谢哈!

    真钱游戏05-22 16:27 回复
  11. 我还是来围观下,头大了

    混小子05-22 17:26 回复
    • 推荐你去【知蚁微博客】看看

      知蚁05-22 19:56 回复
  12. 太技术了,看不太懂啊。。。

    淘靓吧05-22 17:46 回复
    • 我争取把所有看不懂的都给教会喽

      知蚁05-22 22:04 回复
  13. 蚂蚁 你的文章好深奥

    邓肯05-22 17:57 回复
    • 那我以后从基本一点的东西写起,呵呵

      知蚁05-22 22:04 回复
  14. 这些方面都是你专注的吗?

    卢松松05-22 22:26 回复
    • 我的工作就是写代码,算是老本行吧

      知蚁05-22 22:45 回复
  15. 技术人才啊

    leedi05-22 22:53 回复
  16. 真是个代码高手。随便几句就搞定了。。

    放思05-22 23:20 回复
  17. 技术的高手。

    松鼠网05-23 10:27 回复
  18. 哥们是高手原来

    姜敏05-23 10:45 回复
    • 不敢当啊,呵呵

      知蚁05-23 19:14 回复
  19. 新手,不太懂,看来有待提高啊

    • 这些都是基础知识,可以看看噻

      知蚁05-23 19:11 回复
  20. 博主是程序元么?

    陈连龙05-23 13:03 回复
    • 算是程序员吧,不过比程序员轻松点

      知蚁05-23 19:10 回复
  21. 这个是什么程序的代码啊

    自贡SEO05-23 14:37 回复
    • 传说中的C++

      知蚁05-23 19:08 回复
  22. 这个写的可真专业啊

    甲亢治疗05-23 14:42 回复
    • 过奖了,一些C语言的基本知识

      知蚁05-23 19:09 回复
  23. 你的域名很。。。

    SB05-23 14:49 回复
    • 很好记还是很长啊?

      知蚁05-23 19:08 回复
  24. 冲击式破碎机网站主也来看看了哈。

    • 欢迎常来砸一砸,呵呵

      知蚁05-23 19:07 回复
  25. 貌似技术性很强啊!!支持下先!

    风的博客05-23 16:30 回复
    • 多谢支持

      知蚁05-23 19:05 回复
  26. 咦 你也挂拿福能啦 哈哈 软文呢

    邓肯05-23 17:36 回复
    • 我N久前就挂了,在松松博客上看到了,当天就挂上了

      知蚁05-23 19:04 回复
    • 所谓的软文也准备好了,(*^__^*) 嘻嘻……

      知蚁05-23 22:46 回复
  27. 这个还真不知道

    周舟05-23 17:50 回复
    • 那现在知道了哈

      知蚁05-23 19:04 回复
  28. 真晕

    男言之隐05-27 13:17 回复
  29. 这些方法以前都没有用过,

    临沂医院06-21 14:04 回复
  30. 正找呢,谢谢

    匿名07-05 22:15 回复

我来说说

(必须)

(必须,保密)

你确定你已经看过文章了?
取消

无觅相关文章插件,快速提升流量