ホームページ  >  記事  >  バックエンド開発  >  C で 64 ビット整数をビッグ エンディアンからリトル エンディアンに変換するにはどうすればよいですか?

C で 64 ビット整数をビッグ エンディアンからリトル エンディアンに変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 07:51:02891ブラウズ

How to Convert 64-Bit Integers from Big Endian to Little Endian in C  ?

C でのビッグ エンディアンからリトル エンディアンへの 64 ビット整数変換

標準 C 関数 ntohl() は、32 ビット整数を次から変換します。ネットワーク バイト オーダー (ビッグ エンディアン) からホスト バイト オーダー (リトル エンディアン) へ、またはその逆。ただし、一部のプラットフォームでは 64 ビット整数 (特に符号なしの Long Long 値) を変換する必要があります。

残念ながら、C 標準には 64 ビット整数変換用の専用関数が提供されていません。ただし、プラットフォーム固有の実装は存在します。

プラットフォーム固有のソリューション

  • Linux および FreeBSD: htobe64 および be64toh は < で定義されています。 ;エンディアン.h> 64 ビット整数変換用。
  • OpenBSD: カスタム マクロ be16toh、be32toh、be64toh は で使用できます。バイトオーダー変換の場合。

コード例

次のコードは、さまざまなプラットフォームで 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。