質問:
htonl のような標準関数を取得できますかこれは C の 64 ビット整数で動作し、ネットワーク バイト オーダーへの変換を可能にしますか?
答え:
C には htonll のような明示的に定義された関数はありませんが、標準ライブラリを使用すると、移植可能な実装を作成できます。以下に 2 つのアプローチを示します。
動的エンディアンネス検出の使用:
<code class="cpp">#define htonll(x) ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) #define ntohll(x) ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))</code>
プリプロセッサ マクロの使用:
<code class="cpp">#if __BIG_ENDIAN__ # define htonll(x) (x) # define ntohll(x) (x) #else # define htonll(x) (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) # define ntohll(x) (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32)) #endif</code>
以上がポータブルな 64 ビット整数バイト順序関数を C で実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。