首頁  >  文章  >  後端開發  >  如何在 C 中將 64 位元整數從 Big Endian 轉換為 Little Endian ?

如何在 C 中將 64 位元整數從 Big Endian 轉換為 Little Endian ?

Linda Hamilton
Linda Hamilton原創
2024-10-30 07:51:02892瀏覽

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

C 語言中從Big Endian 到Little Endian 的64 位元整數轉換

標準C 函數ntohl() 將32 位元整數轉換為網路位元組順序(大端)到主機位元組順序(小端),反之亦然。然而,在某些平台上需要轉換 64 位元整數(特別是 unsigned long long 值)。

不幸的是,C 標準沒有提供 64 位元整數轉換的專用函數。但是,存在特定於平台的實現。

平台特定的解決方案

  • Linux 和FreeBSD: htobe64 和be64toh 在< 中定義;用於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 位元整數從 Big Endian 轉換為 Little Endian ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn