c和c++中,對結構體進行強制型別轉換
阿新 • • 發佈:2019-02-07
有這麼兩個結構體
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地址;