混乱htonsっエンディアン/ビッグエンディアン
-
16-09-2019 - |
質問
時を送りたいの整数型変数からプロセスを通じて、他のソケット、印刷における値を受け、この値はそのまま使用せずntohl/htonl、その場で使ったらよいでしこれらの機能以外の初期化ソケット構造です。か級/ビッグエンディアンです。※なぜなしに変換する必要があるポートおよびIP番ホスト/ネットワークバイト順序に従いる場合、以下のように表示され変更はありません。を、詳しく説明してください数値の整数であtranferredネットワーク?
解決
、その後、任意の時間は、あなたが最初にhtons
またはhtonl
を使用してバイトオーダーをネットワークに変換する必要があり、ネットワーク上のサイズが1バイトより大きい整数送信し、受信側のコンピュータは、それを変換する必要がありますntohs
またはntohl
を使用してバイト順序をホストする。
あなたのケースでは、値はまだ同じである理由は、おそらくです。言い換えれば、あなたが作業している送信側のコンピュータと受信側のコンピュータは、リトルエンディアンの両方です(場合によっては何かビッグエンディアン、。)
しかし、あなたはあなたのプログラムがポータブルになりたい場合は、あなたは常にケースのように、このに頼ることはできません。ある日、例えば、送信側コンピュータは、Intelのx86であってもよく、受信側では、Sun SPARCとすることができ、あなたがhtons
を使用していないならば、あなたのプログラムが失敗します。
他のヒント
送信したい場合はそれぞれのデータからのx86またはamd64機械機PowerPCプロセッサ、 バイナリー 形式だけ素早く参照するデータとの出会いは、"NUXI問題"として、異なるプロセッサの整数でなされるようにスワップのバイトです。(さん実際にスワップのバイトという形をとっていう作業を有していてもよく、順は異なることがあります)。
する場合、x86またはamd64、少なくとも有意ではないバイトが最初のメモリをこの方法を行うことができ、収-メモリアドレス).のPowerPCにもっとも大きなバイトが最初にメモリ(このように並べ替えることができ数に基づくバイトをする前記憶--文字列のソート、整数値の並べ替えで正確に同じ。)
これは、同じことをremaimns。あなたが別のアーキテクチャのためのあなたのコードをコンパイルする予想されることはありません場合は、hton / ntoh呼び出しを省略することができます。あなたのコードは、ポータブルではありません。