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中文網其他相關文章!