问题:
我们能否获得像 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中文网其他相关文章!