__u32 ip_str2int(char *s){//zw011!
    int n=0,tmp=0;
    __u32 r
=0;
    
char *pt;
    pt
=(char *)&r;
    
while(*s){
        
if(*s=='.')
            
*(pt+n)=tmp;
            n
++;
            tmp
=0;
            s
++;
        }

        tmp
*=10;
        tmp
+=*s-'0';
        s
++;
        
if(!*s)
            
*(pt+n)=tmp;
    }

    
return r;//big-endian
    
//return htonl(r); //little-endian
}


另附:

Big-Endian 和 Little-Endian 字节排序

字节排序 含义
Big-Endian 一个Word中的高位的Byte放在内存中这个Word区域的低地址处。
Little-Endian 一个Word中的低位的Byte放在内存中这个Word区域的低地址处。

必须注意的是:表中一个Word的长度是16位,一个Byte的长度是8位。如果一个数超过一个Word的长度,必须先按Word分成若干部分,然后每一部分(即每个Word内部)按Big-Endian或者Little-Endian的不同操作来处理字节。

一个例子:
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
                big-endian     little-endian
0x0000     0x12              0xcd
0x0001     0x34              0xab
0x0002     0xab              0x34
0x0003     0xcd              0x12