国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C/C++ 跨平臺I/O操作技巧

2019-11-17 05:20:33
字體:
來源:轉載
供稿:網友

  假如你正在寫從文件或網絡讀寫數據的跨平臺C/C++代碼,那么你必須明白有些問題是因語言,編譯器,平臺而不同的。 主要的問題是數據對齊,填充,類型大小,字節順序和默認狀態char是否有符號。

  對齊

  特定機器上,特定的數據被對齊于特定的邊界。假如數據沒有正確對齊,結果可能是效率降低甚至崩潰。 當你從I/O源讀取數據的時候,確保對齊是正確的。

  填充

  "填充" 是數據集合中不同元素之間的間隔, 一般是為了對齊而存在。不同編譯器和平臺下,填充的數量可能會不同。?不要假設結構的大小和成員的位置在任何編譯器和平臺下都是相同的。 不要一次性讀取或者寫入一整個結構體,因為寫入的程序可能會使用和讀取的程序不同的填充方式。對于域也同樣適用。

  類型大小

  不同數據類型的大小隨編譯器和平臺而不同。 在C/C++中, 內置類型的大小完全取決于編譯器(在特定范圍內). 不要讀寫大小不明確的數據類型。也就是說,不要讀寫bool, enum, long, int, short, float, 或者double類型.(譯者注:事實似乎不是這樣,我記得C/C++標準規定了一些數據類型的長度,例如short 2字節,long 4字節等等,在符合標準規定的編譯器上,使用這些類型可以保證跨平臺的正確性)


用這些 替代這些... 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
  字節順序

  字節順序,就是字節在內存中存儲的順序。 不同的處理器存儲多字節數據的順序是不同的。 小端處理器由低到高存儲(換句話說,和書寫的順序相反).。大端處理器由高到低存儲(和書寫順序相同)。假如數值的字節順序和讀寫它的處理器不同,它必須被事先轉化。同時,為了標準化網絡傳輸的字節順序,定義了網絡字節順序。

  char - 有符號還是無符號?

  一個鮮為人知的事實,char默認可以是有符號的也可以是無符號的-完全取決于編譯器。結果導致你從char轉化為其他類型的時候(比如int),結果會因編譯器而不同。 例如:

char x;
int y;

read( fd, &x, 1 ); // 讀取一個byte值為0xff
y = x; // y 是 255 或者 -1, 依靠編譯器
  不要把數據讀入一般的char。明確指定是有符號或者無符號的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳原县| 神木县| 桓台县| 志丹县| 永泰县| 额济纳旗| 清原| 松江区| 巴东县| 庆城县| 哈尔滨市| 基隆市| 无锡市| 遂昌县| 同江市| 富锦市| 苗栗县| 张掖市| 济源市| 阿尔山市| 搜索| 祁东县| 丹凤县| 抚州市| 维西| 渝北区| 阿城市| 浦县| 衡水市| 邓州市| 建水县| 和田县| 旬阳县| 玛多县| 永德县| 偃师市| 北辰区| 汝南县| 谢通门县| 罗田县| 石嘴山市|