問題:
我們能否得到像htonl 這樣的標準函數在C 中使用64 位元整數,允許轉換為網路位元組順序?
答案:
雖然 C 中沒有像 htonll 這樣明確定義的函數標準函式庫,可以建立可移植的實作。這裡有兩種方法:
使用動態位元組順序偵測:
<code class="cpp">#define htonll(x) ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) #define ntohll(x) ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))</code>
使用預處理器宏:
<code class="cpp">#if __BIG_ENDIAN__ # define htonll(x) (x) # define ntohll(x) (x) #else # define htonll(x) (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) # define ntohll(x) (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32)) #endif</code>
以上是如何用 C 語言實作可移植的 64 位元整數位元組排序函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!