强制性转换的简单问题 但我就是不懂!!!麻烦大家了!!!
/****************************************************   
          inet_ntoa 
 ---------------------------------------------------- 
 Converts   a   IP   address   repersented   in   a   32   bit 
 unsigned   int   into   a   string 
 ****************************************************/		//1将32位的无符号整型IP地址转换为字符串 
 char   *inet_ntoa(__u32   ina)			//1不懂!!! 
 { 
             static   char   buf[4*sizeof    "123 "];	 
             unsigned   char   *ucp   =   (unsigned   char   *)&ina;		//1把IP地址的值的地址从整型转换成字符型指针 
             sprintf(buf,    "%d.%d.%d.%d ",		////把地址设置为XXX.XXX.XXX.XXX的形式 
                                     ucp[0]   &   0xff,				//四个字段,每个字段与上FF,确保数据正确,ucp[0]表示前3位, 
                                     ucp[1]   &   0xff,				//ucp[1]表示接下来的3位,依此类推都 "打印 "到buf里 
                                     ucp[2]   &   0xff, 
                                     ucp[3]   &   0xff); 
             return   buf; 
 }     
 其中      字符型指针ucp[0]-[3]到底有几个字符?    
 从buf的定义来看   是个16个字符的字符数组吧 
 由于%d后有个 ". "那么%d应该是3个字符吧 
 那为什么unsigned   char   *ucp   =   (unsigned   char   *)&ina;后 
 ucp指向ina,这样的话, 
 ucp[0]-[3]每一个只代表3个字符??应该有4个字符啊!!    
 这样的话那buf就应该有20个字符了!!!   
 到底是怎样的啊!!麻烦大家了!! 
------解决方案-------------------->  ucp[0]-[3]每一个只代表3个字符??应该有4个字符啊!!  
 为何这么想?   
 一个字节的数据换算成10进制最多只有三位,因为最大是255,所以   
 一个32位整数是四个字节,每个字节转换成一个char,正好放在ucp里面。 
 举个例子你就明白了,192.168.1.1这个地址存成整数,那么整数的四个字节里面分别存的是(假定字节顺序是我这样): 
 192, 168, 1, 1 
 换成16进制是: 
 0xc0, 0xa8, 0x01, 0x01 
 那么, 
 ucp[0] = 0xc0 
 ucp[1] = 0xa8 
 ucp[2] = 0x01 
 ucp[3] = 0x01   
 .......   
 似乎太罗嗦了,就不说了,估计你已经明白了:)。