C での 64 ビット エンディアン変換
htonl() 関数は通常、32 ビット整数をホストからネットワーク バイトに変換するために使用されます。注文。ただし、64 ビット整数の場合はこれでは十分ではない可能性があり、別のアプローチが必要です。
クロスプラットフォーム ソリューション
標準的なクロスプラットフォーム ソリューションについては、次のことを検討してください。 htobe64() 関数を使用します。この関数は Linux および FreeBSD で使用でき、次のように使用できます。
<code class="cpp">#include <endian.h> uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64(host_int); host_int = be64toh(big_endian);</code>
プリプロセッサ マクロ
htobe64() が使用できない場合は、次のように使用できます。プラットフォームの違いを隠すためのプリプロセッサ マクロ。次のコードは、Linux、FreeBSD、および OpenBSD に対してこれを実行します。
<code class="cpp">#if defined(__linux__) # include <endian.h> #elif defined(__FreeBSD__) || defined(__NetBSD__) # include <sys/endian.h> #elif defined(__OpenBSD__) # include <sys/types.h> # define be16toh(x) betoh16(x) # define be32toh(x) betoh32(x) # define be64toh(x) betoh64(x) #endif</code>
ユニオンベースのアプローチ
別のオプションは、64 ビットを表すためにユニオンを使用することです。ビッグエンディアン形式とリトルエンディアン形式の両方の整数。その後、それに応じてバイトを交換できます。ただし、このアプローチはビッグ エンディアン プラットフォームでは機能しない可能性があります。
以上がC でホストとネットワークのバイトオーダー間で 64 ビット整数を変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。