首頁 >後端開發 >C++ >如何在 C 語言中除了 ntohl() 之外轉換 64 位元整數?

如何在 C 語言中除了 ntohl() 之外轉換 64 位元整數?

Barbara Streisand
Barbara Streisand原創
2024-10-30 11:27:27493瀏覽

How to Convert 64-Bit Integers in C   Beyond ntohl()?

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 在小端到大端之間進行轉換,從而有效地保留其值。

以上是如何在 C 語言中除了 ntohl() 之外轉換 64 位元整數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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