zoukankan      html  css  js  c++  java
  • TCP/IP中32位IP地址与字符串转化(转)

    在网络上面我们用的IP都是数字加点(192.168.0.1)构成的, 而在struct in_addr结构中用的是32位的IP,我们上面那个32位IP(C0A80001)是的192.168.0.1 为了转换我们可以使用下面两个函数  

        int inet_aton(const char *cp,struct in_addr *inp) 
        char *inet_ntoa(struct in_addr in) 

        函数里面 a 代表 ascii n 代表network.第一个函数表示将a.b.c.d的IP转换为32位的IP,存储在 inp指针里面.第二个是将32位IP转换为a.b.c.d的格式.
     

        同样inet_addr也可以进行字符串到32位整形的转换:

        首先,假设你已经有了一个sockaddr_in结构体ina,你有一个IP地址"132.241.5.10" 要储存在其中,你就要用到函数inet_addr(),将IP地址从 点数格式转换成无符号长整型。使用方法如下:
        ina.sin_addr.s_addr = inet_addr("132.241.5.10");
        有的也使用unsigned long dst_ip = inet_addr("");

        可见IPv4 套接口地址结构 
        struct in_addr 
        { 
            in_addr_t s_addr ; 
        } 
        // 32bits IPv4 地址 
        //网络字节顺序 Network Byte Order 
        类似:
        struct in_addr 
        {
            unsigned long s_addr; // that’s a 32-bit long, or 4 bytes
        }; 

        这里错误返回INADDR_NONE (实际上是-1,每位都是1)
        而另一个INADDR_ANY的值为0,意思是任何地址都可以。

        注意,inet_addr()返回的地址已经是网络字节格式,所以你无需再调用 函数htonl()。
        我们现在发现上面的代码片断不是十分完整的,因为它没有错误检查。 显而易见,当inet_addr()发生错误时返回-1。记住这些二进制数字?(无符  号数)-1仅仅和IP地址255.255.255.255相符合!这可是广播地址!大错特 错!记住要先进行错误检查。
        好了,现在你可以将IP地址转换成长整型了。有没有其相反的方法呢? 它可以将一个in_addr结构体输出成点数格式?这样的话,你就要用到函数 inet_ntoa()("ntoa"的含义是"network to ascii"),就像这样: 
        printf("%s",inet_ntoa(ina.sin_addr));
        它将输出IP地址。需要注意的是inet_ntoa()将结构体in-addr作为一 个参数,不是长整形。同样需要注意的是它返回的是一个指向一个字符的 指针。它是一个由inet_ntoa()控制的静态的固定的指针,所以每次调用 inet_ntoa(),它就将覆盖上次调用时所得的IP地址。例如:
        char *a1, *a2;
        .
        .
        a1 = inet_ntoa(ina1.sin_addr); /* 这是198.92.129.1 */
        a2 = inet_ntoa(ina2.sin_addr); /* 这是132.241.5.10 */
        printf("address 1: %s ",a1);
        printf("address 2: %s ",a2);
        输出如下:
        address 1: 132.241.5.10
        address 2: 132.241.5.10
        假如你需要保存这个IP地址,使用strcopy()函数来指向你自己的字符指针。 

  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/qq78292959/p/3097383.html
Copyright © 2011-2022 走看看