2012-01-06 6 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に含めることです(私はそれがないOSは見たことがありません)。

+0

defはおそらく__WIN32__が定義されているかどうかに依存しています。そうでない場合は、winsockの代わりにを含めてください。 – dbrank0

+0

@ dbrank0良いコメントを投稿する場合は、例:-) –

+0

@AdrianCornish 'ntohl'は、バイトオーダーがビッグエンディアンでない場合にのみスワップします。アライメントはそれとは関係ありません。 – moshbear

関連する問題