zoukankan      html  css  js  c++  java
  • ip地址转化代码实例

    /*@author: lgh@
     *
     * */
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <netinet/in.h>//ntohl
    #include <arpa/inet.h> //inet_addr
    #include <sys/types.h>
    #ifdef UNICODE
    #define T(x)          __TXT(x)
    #define __TXT(s)      L ## s
    #else
    #define T(s)          s
    #endif /* UNICODE */
    /*
    #if defined (DEBUG_DISABLE)
    #undef DEBUG_DISABLE
    #else
    #endif
    */
    
    /*********************************************************************/
    #ifndef DEBUG_DISABLE
    /*
    #define lprint(tag, fmt...)     
    do{if(tag)printf(fmt);}while(0)
    */
    #define lprint(x, ...)  do{printf(x, ##__VA_ARGS__);}while(0)
    #else
    #define lprint(tag, fmt...)
    #endif
    
    
    /*********************************************************************/
    #ifdef CONFIG_DUAL_IMAGE
    #if defined (CONFIG_RT2880_FLASH_2M)
    #define IMAGE1_SIZE             0x100000
    #elif defined (CONFIG_RT2880_FLASH_4M)
    #define IMAGE1_SIZE             0x200000
    #elif defined (CONFIG_RT2880_FLASH_8M)
    #define IMAGE1_SIZE             0x400000
    #elif defined (CONFIG_RT2880_FLASH_16M)
    #define IMAGE1_SIZE             0x800000
    #elif defined (CONFIG_RT2880_FLASH_32M)
    #define IMAGE1_SIZE             0x1000000
    #else
    #define IMAGE_SIZE      TEST
    #endif
    #endif//end #ifdef,否则会出现25:1: error: unterminated #ifdef,这样的错
    
    
    /*********************************************************************/
    typedef void* (*square_t)(int* x);
    
    void* square (int* x)
    {
            *x *= *x;
            return (void*)square;
    }
    
    int lt1224(void)
    {
            int x = 2;
            ((square_t)((square_t)((square_t)square (&x)) (&x)) (&x)) (&x);
            printf ("%d
    ", x);
            return 0;
    }
    /*********************************************************************/
    #ifndef NIP4
    #define NIP4_FMT "%u.%u.%u.%u"
    #define NIP4(addr)                      
            ((unsigned char *)&addr)[0],    
            ((unsigned char *)&addr)[1],    
            ((unsigned char *)&addr)[2],    
            ((unsigned char *)&addr)[3]
    
    #define HIP4_FMT "%u.%u.%u.%u"
    #define HIP4(addr)                      
            ((unsigned char *)&addr)[3],    
            ((unsigned char *)&addr)[2],    
            ((unsigned char *)&addr)[1],    
            ((unsigned char *)&addr)[0]
    #endif
    
    #ifndef NIP6
    #define NIP6_FMT "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x"
    #define NIP6(addr)                    
        (unsigned)((addr)[0]),            
        (unsigned)((addr)[1]),            
        (unsigned)((addr)[2]),            
        (unsigned)((addr)[3]),            
        (unsigned)((addr)[4]),            
        (unsigned)((addr)[5]),            
        (unsigned)((addr)[6]),            
        (unsigned)((addr)[7]),            
        (unsigned)((addr)[8]),            
        (unsigned)((addr)[9]),            
        (unsigned)((addr)[10]),            
        (unsigned)((addr)[11]),            
        (unsigned)((addr)[12]),            
        (unsigned)((addr)[13]),            
        (unsigned)((addr)[14]),            
        (unsigned)((addr)[15])
    #endif
    
    /*
    #ifdef __CHECKER__
    #define __bitwise__ __attribute__((bitwise))
    #else
    #define __bitwise__
    #endif
    #ifdef __CHECK_ENDIAN__
    #define __bitwise __bitwise__
    #else
    #define __bitwise
    #endif
    typedef __u16 __bitwise __le16;
    typedef __u16 __bitwise __be16;
    typedef __u32 __bitwise __le32;
    typedef __u32 __bitwise __be32;
    typedef __u64 __bitwise __le64;
    typedef __u64 __bitwise __be64;
    */
    
    typedef __signed__ char __s8;
    typedef unsigned char __u8;
    
    typedef __signed__ short __s16;
    typedef unsigned short __u16;
    
    typedef __signed__ int __s32;
    typedef unsigned int __u32;
    
    typedef __signed__ long __s64;
    typedef unsigned long __u64;
    
    union nf_inet_addr {
            __u32           all[4];
            __u32           ip;//   __be32          ip;
    //      __be32          ip6[4];
            struct in_addr  in;
            struct in6_addr in6;
    };
    /*********************************************************************/
    
    union endian{
            int i;
            char c;
    };
    
    int main(int argc, char *argv[])
    {
            char *s="0123456789012345678901234567890";
            char *p;
            p=strpbrk(s,"a1 839"); /*1会最先在s字符串中找到*/
            lprint("%s
    ",p);
            p=strpbrk(s,"4398");/*3 会最先在s 字符串中找到*/
            lprint("%s
    ",p);
            lprint("%s
    ", T("deling"));
    
            lprint("************************************************************************
    ");
            lt1224();
    
            lprint("************************************************************************
    ");
            if(argc != 2)
            {
                    return 1;
            }
            union endian le;
            le.i = 0x3456;/*16bit宽的数*/
            if(le.c == 0x56){
                    lprint("little endian
    ");
            }else lprint("big endian
    ");
            printf("%0x, %0x
    ", le.i, le.c);
    
            char ipdot[32] = {0};/*点分十进制*/
            long iphost = 0;/*主机字节序,x86一般都是小端模式*/
            long ipnet = 0;/*网络字节序,大端模式*/
    
            strncpy(ipdot, argv[1], sizeof(ipdot));
            lprint("Get ipdot:%s
    ", ipdot);
    
            ipnet = inet_addr(ipdot);
            lprint("Get ipnet:%ld:"NIP4_FMT"
    ", ipnet, NIP4(ipnet));
            iphost = ntohl(ipnet);
            lprint("Get iphost:%ld:"NIP4_FMT"
    ", iphost, NIP4(iphost));
            lprint("Get iphost:%ld:"HIP4_FMT"
    ", iphost, HIP4(iphost));
            iphost++;
            lprint("Get iphost++:%ld:"HIP4_FMT"
    ", iphost, HIP4(iphost));
    
                    /*net --> host*/
            unsigned array[4];
            array[0] = (ntohl(ipnet) >> 24) & 0xFF;
            array[1] = (ntohl(ipnet) >> 16) & 0xFF;
            array[2] = (ntohl(ipnet) >> 8) & 0xFF;
            array[3] = ntohl(ipnet) & 0xFF;
            lprint(NIP4_FMT"
    ", array[0], array[1], array[2], array[3]);
    
            lprint("%ld.%ld.%ld.%ld
    ", ipnet & 0xff,
                            ipnet>>8 & 0xff,
                            ipnet>>16 & 0xff,
                            ipnet>>24 & 0xff);
            lprint("************************************************************************
    ");
            return 1;
    }
  • 相关阅读:
    题解 P1030 【求先序排列】
    行列式及其打开方式
    题解 P2580 【于是他错误的点名开始了】
    题解 P1130 【红牌】
    题解 P5239 【回忆京都】
    题解 P1184 【高手之在一起】
    【笔记】自学ST表笔记
    题解 P1208 【[USACO1.3]混合牛奶 Mixing Milk】
    树状数组自学笔记
    EBS R12.2系统logo的修改
  • 原文地址:https://www.cnblogs.com/shudai/p/3262683.html
Copyright © 2011-2022 走看看