C での 64 ビット整数変換: ntohl() を超えて
ドキュメントで示唆されている htonl() 関数は制限されています32 ビット整数への変換。ただし、64 ビット変換が必要な状況では、いくつかのオプションが利用可能です。
標準ライブラリ関数
Linux (glibc >= 2.9) および FreeBSD の場合、 htobe64() 関数を使用すると、64 ビット整数をビッグ エンディアンからリトル エンディアンに変換できます。この関数は標準 C ライブラリの一部です。
共用体ベースのアプローチ
代わりに、共用体を使用して 64 ビット整数と 8 バイト間の変換を行うこともできます。文字配列。このアプローチには、ビッグ エンディアン プラットフォームに合わせてバイトを手動で交換することが含まれます。
プリプロセッサ マクロ
プラットフォーム固有の違いを隠し、統一されたアプローチを提供するには、次のコードを使用できます。プリプロセッサ コード:
<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>
このコードは、Linux、OpenBSD、FreeBSD、および NetBSD 上で Linux/FreeBSD スタイルのマクロを提供します。
使用例
推奨されるアプローチの使用法を示すために、次のコードを検討してください。
<code class="cpp">#include <stdint.h> // For 'uint64_t' int main() { uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64(host_int); host_int = be64toh(big_endian); return 0; }</code>
このコードは、64 ビット整数 host_int をリトル エンディアンからビッグ エンディアンに変換し、その値を効果的に保持します。
以上がntohl() を超えて C で 64 ビット整数を変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。