ntohl() 64 ビット値の拡張
C 関数 ntohl() は通常、ネットワークからの 32 ビット値を変換するために使用されます。バイトオーダーからホストバイトオーダーへ。ただし、特定のシナリオでは、64 ビット値に対して同様の操作が必要になる場合があります。
解決策
htonl() のマニュアル ページには、32 ビット値への制限が示されています。特定のプラットフォームでは unsigned long のサイズが 32 ビットであるため、ビット値。 64 ビット変換の必要性に対処するには、いくつかのアプローチを検討できます。
標準ライブラリ:
実装に関する提案:
プリプロセッサ マジック:
<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>
使用例:
プリプロセッサ マジックを使用すると、次のコード スニペットを使用して変換を実行できます:
<code class="cpp"> #include <stdint.h> uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64( host_int ); host_int = be64toh( big_endian );</code>
このアプローチでは、複数のプラットフォーム間で互換性のある標準 C ライブラリのようなインターフェイスが提供されます。
以上がC でネットワークとホストのバイトオーダー間で 64 ビット値を変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。