2012-01-06 69 views
1

我正在編寫一個跨平臺的客戶端,並在提取使用的存檔中,它爲每個文件使用IEEE 802.3以太網CRC-32校驗和。我跑對所有像這樣的文件,這個檢查:跨平臺版本的ntohl()? - C++

if(s3d_meta_block.crc != 0x61580AC9) 
{ 
    errorLog.writeError("File %i is not a valid file/ or is the directory", i); 
} 

它結束了失敗的文件中的每一個,我發現它在同類客戶再用ntohl與(0x61580AC9)其他地方寫的。

我在64位Windows上編寫它,理想情況下,它可以在每個平臺上運行,而不必包含「Winsock2.h」和涉及反轉字節序的其他庫。

謝謝!

回答

1

ntohl()包含在許多平臺上,並且不會根據處理器對齊需要交換位。你可能需要在你的代碼中唯一的東西是#def的包含這個函數的正確的頭文件(我從來沒有見過沒有它的操作系統)

+0

這def可能可以依賴__WIN32__被定義或不。如果沒有,請包括而不是winsock。 – dbrank0 2012-01-06 06:36:47

+0

@ dbrank0如果你打算髮佈一個很好的評論發佈一個例子;-) – 2012-01-06 06:38:20

+0

@AdrianCornish'ntohl'只有在字節排序不是大端時纔會交換。對齊與它無關。 – moshbear 2012-01-06 09:44:56