64 位元值的ntohl() 擴充
C 函數ntohl() 通常用於從網路轉換32 位元值位元組順序到主機位元組順序。然而,在某些情況下,可能需要對 64 位元值進行類似的操作。
解
htonl() 的手冊頁顯示其限制為 32-位元值,因為某些平台上的 unsigned long 大小為 32 位元。為了滿足64 位轉換的需求,可以探索幾種方法:
標準庫:
實作建議:
預處理器魔法:
<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>
使用範例:
使用預處理器魔法,可以使用以下程式碼片段執行轉換:
<code class="cpp"> #include <stdint.h> uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64( host_int ); host_int = be64toh( big_endian );</code>
此方法提供了一個類似於標準C 庫的接口,可跨多個平台兼容。
以上是如何在 C 語言中在網路位元組順序和主機位元組順序之間轉換 64 位元值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!