有如下程序 
char* ip="10.7.93.25"; 
int* p=new int[4]; 
IN_ADDR q; 
q.S_un.S_addr=inet_addr(ip); 
cout < <q.S_un.S_addr; 
该程序是将ip地址字符串转化为ulong变量的 
我知道in_addr结构体中的联合变量S_un有结构体 S_un_b,是4个字节的char型变量 

那么如何将ip地址转化成q.S_un.S_un_b 而不是ulong型呢? 

另外 为什么由的程序需要用htonl函数来包装ulong型的ip地址呢? 

我查了msdn 

htonl函数是用来转化机器字节到网络字节的。什么情况下需要转化呢?