1. 程式人生 > >c和c++中,對結構體進行強制型別轉換

c和c++中,對結構體進行強制型別轉換

有這麼兩個結構體

1.
struct sockaddr
{
      unsigned short  sa_family;//地址型別
      char            sa_data[14];//協議地址
 }
2.
struct sockaddr_in
{
      unsigned short   sin_family;     //地址型別     
      unsigned short int  sin_port;    //埠號    
      struct in_addr      sin_addr;    //ip地址    
      unsigned char       sin_zero[8]; // 填充空間
}
struct in_addr
{
    unsigned long a_addr;
}



在實際網路程式設計過程中結構體 1和2都可以對socket進行地址的配置,但通常都是先初始化好結構體2,再將它強制轉化成結構體1來使用。那麼,結構體型別之間的強制型別轉換是如何進行的呢?

我們知道,不管是什麼型別的資料,最終都是以二進位制形式存放在記憶體中,我們以int型別的方式儲存,再以int型別的方式解讀,得到的資料便是int型別,結構體變數也是類似,首先我們是向系統申請了一段記憶體空間來儲存我們的結構體變數,當我們需要獲得記憶體中的資料時,再以結構體中各變數型別的順序對記憶體資料進行解讀;

如上兩個結構體,長度都為16位元組,sockaddr_in.sin_family的資料存入sockaddr.sa_family,剩下的14個位元組存入sockaddr.sa_data,這樣在各種操作中可以方便的處理埠號和ip地址;