For investors
股價:
5.36 美元 %For investors
股價:
5.36 美元 %認真做教育 專心促就業(yè)
如果你正在寫從文件或網(wǎng)絡讀寫數(shù)據(jù)的跨平臺c/c++代碼,那么你必須明白有些問題是因語言,編譯器,平臺而不同的。 主要的問題是數(shù)據(jù)對齊,填充,類型大小,字節(jié)順序和默認狀態(tài)char是否有符號。
對齊
特定機器上,特定的數(shù)據(jù)被對齊于特定的邊界。如果數(shù)據(jù)沒有正確對齊,結果可能是效率降低甚至崩潰。 當你從i/o源讀取數(shù)據(jù)的時候,確保對齊是正確的。
填充
"填充" 是數(shù)據(jù)集合中不同元素之間的間隔, 一般是為了對齊而存在。不同編譯器和平臺下,填充的數(shù)量可能會不同。?不要假設結構的大小和成員的位置在任何編譯器和平臺下都是相同的。 不要一次性讀取或者寫入一整個結構體,因為寫入的程序可能會使用和讀取的程序不同的填充方式。對于域也同樣適用。
類型大小
不同數(shù)據(jù)類型的大小隨編譯器和平臺而不同。 在c/c++中, 內置類型的大小完全取決于編譯器(在特定范圍內). 不要讀寫大小不明確的數(shù)據(jù)類型。也就是說,不要讀寫bool, enum, long, int, short, float, 或者double類型.(譯者注:事實似乎不是這樣,我記得c/c++標準規(guī)定了一些數(shù)據(jù)類型的長度,例如short 2字節(jié),long 4字節(jié)等等,在符合標準規(guī)定的編譯器上,使用這些類型可以保證跨平臺的正確性)
用這些 替代這些... int8, uint8 char, signed char, unsigned char, enum, bool int16, uint16 short, signed short, unsigned short, enum int32, uint32int, signed int, unsigned int, long, signed long, unsigned long, enum int64, uint64 long, signed long, unsigned long int128, uint128long long, signed long long, unsigned long long float32floatfloat64double
字節(jié)順序
字節(jié)順序,就是字節(jié)在內存中存儲的順序。 不同的處理器存儲多字節(jié)數(shù)據(jù)的順序是不同的。 小端處理器由低到高存儲(換句話說,和書寫的順序相反).。大端處理器由高到低存儲(和書寫順序相同)。如果數(shù)值的字節(jié)順序和讀寫它的處理器不同,它必須被事先轉化。同時,為了標準化網(wǎng)絡傳輸?shù)淖止?jié)順序,定義了網(wǎng)絡字節(jié)順序。
char - 有符號還是無符號?
一個鮮為人知的事實,char默認可以是有符號的也可以是無符號的-完全取決于編譯器。結果導致你從char轉化為其他類型的時候(比如int),結果會因編譯器而不同。
【免責聲明】本文部分系轉載,轉載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請在30日內與聯(lián)系我們,我們會予以更改或刪除相關文章,以保證您的權益!