我用一個文件來存儲一個結構到網絡秩序,我只是寫的原始數據,將其鑄造變量爲char *並通過他們的地址寫變化的變量寫原始數據時,提交
virtual void write(ostream& os){
UINT loTmpVal = value();
os.write((char*)&loTmpVal, sizeof(loTmpVal));
}
我想知道我是否應該使用hton convertions來改變網絡順序的字節順序。
p.s.當然我會用一個簡單的讀取逐個獲取變量。
我用一個文件來存儲一個結構到網絡秩序,我只是寫的原始數據,將其鑄造變量爲char *並通過他們的地址寫變化的變量寫原始數據時,提交
virtual void write(ostream& os){
UINT loTmpVal = value();
os.write((char*)&loTmpVal, sizeof(loTmpVal));
}
我想知道我是否應該使用hton convertions來改變網絡順序的字節順序。
p.s.當然我會用一個簡單的讀取逐個獲取變量。
這不是強制執行,但是一個好主意。與爲所有客戶選擇單個字節順序一樣好。當你堅持不懈時,它是LSB還是MSB並不重要。
但是,如果您選擇在發送時使用hton()
,則您必須在接收時在另一端使用ntoh()
。
當使用特定的字節順序:
當使用本機字節的任何時間訂購:
使用本地字節順序可以簡化代碼(你可能讀/寫一次的整個結構)
使用特定的字節順序(如網絡字節順序)允許工作負荷被分佈和數據分享。如果這可能是未來的用例,那麼最好從這種方式開始。
如果數據總是在同一臺機器上使用,執行hton()
只會減慢速度。
但「總是在同一臺機器上使用」是未來的預測,也許你的代碼或數據將被用於未曾計劃的情況。進一步的「可能會減慢速度」是過早的優化,即使對於需要顛倒訂單的機器來說,成本也是可以忽略不計的。
建議之一:
使用網絡秩序
,或者如果它會減慢速度到了:
中包括的文件信息的頂部,指示字節序使用,整數大小。 .tif files使用了這種方法。
當數據被不同的機器讀取時,使用網絡字節順序來克服endianess問題肯定是個好主意。但是,如果訪問數據的不同計算機之間存在其他差異,例如整數大小,它不會讓您陷入麻煩。 – alk 2014-09-04 14:49:34