2014-09-04 18 views
0

我用一個文件來存儲一個結構到網絡秩序,我只是寫的原始數據,將其鑄造變量爲char *並通過他們的地址寫變化的變量寫原始數據時,提交

virtual void write(ostream& os){ 
UINT loTmpVal = value(); 
os.write((char*)&loTmpVal, sizeof(loTmpVal)); 
} 

我想知道我是否應該使用hton convertions來改變網絡順序的字節順序。

p.s.當然我會用一個簡單的讀取逐個獲取變量。

+1

當數據被不同的機器讀取時,使用網絡字節順序來克服endianess問題肯定是個好主意。但是,如果訪問數據的不同計算機之間存在其他差異,例如整數大小,它不會讓您陷入麻煩。 – alk 2014-09-04 14:49:34

回答

0

這不是強制執行,但是一個好主意。與爲所有客戶選擇單個字節順序一樣好。當你堅持不懈時,它是LSB還是MSB並不重要。

但是,如果您選擇在發送時使用hton(),則您必須在接收時在另一端使用ntoh()

0

當使用特定的字節順序:

  • 不同的機器可讀/寫的同一個文件
  • 的數據被髮送到另一臺機器

當使用本機字節的任何時間訂購:

  • 數據讀取/寫入總是在同一臺機器上完成

使用本地字節順序可以簡化代碼(你可能讀/寫一次的整個結構)

使用特定的字節順序(如網絡字節順序)允許工作負荷被分佈和數據分享。如果這可能是未來的用例,那麼最好從這種方式開始。

0

如果數據總是在同一臺機器上使用,執行hton()只會減慢速度。

但「總是在同一臺機器上使用」是未來的預測,也許你的代碼或數據將被用於未曾計劃的情況。進一步的「可能會減慢速度」是過早的優化,即使對於需要顛倒訂單的機器來說,成本也是可以忽略不計的。

建議之一:

  1. 使用網絡秩序

    ,或者如果它會減慢速度到了:

  2. 中包括的文件信息的頂部,指示字節序使用,整數大小。 .tif files使用了這種方法。