C でのビッグ エンディアンからリトル エンディアンへの 64 ビット整数変換
標準 C 関数 ntohl() は、32 ビット整数を次から変換します。ネットワーク バイト オーダー (ビッグ エンディアン) からホスト バイト オーダー (リトル エンディアン) へ、またはその逆。ただし、一部のプラットフォームでは 64 ビット整数 (特に符号なしの Long Long 値) を変換する必要があります。
残念ながら、C 標準には 64 ビット整数変換用の専用関数が提供されていません。ただし、プラットフォーム固有の実装は存在します。
プラットフォーム固有のソリューション
コード例
次のコードは、さまざまなプラットフォームで 64 ビット整数を変換するために使用できます。
<code class="cpp">#include <stdint.h> // For 'uint64_t' #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 int main() { uint64_t host_int = 123; uint64_t big_endian; // Convert to big-endian big_endian = htobe64(host_int); // Convert back to host byte order host_int = be64toh(big_endian); return 0; }</code>
この例では、適切なプラットフォーム固有の関数を使用して、Linux、FreeBSD、および OpenBSD で 64 ビット整数変換を実行します。
以上がC で 64 ビット整数をビッグ エンディアンからリトル エンディアンに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。