C 语言中从 Big Endian 到 Little Endian 的 64 位整数转换
标准 C 函数 ntohl() 将 32 位整数转换为网络字节顺序(大端)到主机字节顺序(小端),反之亦然。然而,在某些平台上需要转换 64 位整数(特别是 unsigned long long 值)。
不幸的是,C 标准没有提供用于 64 位整数转换的专用函数。但是,存在特定于平台的实现。
特定于平台的解决方案
代码示例
以下代码可用于在各种平台上转换 64 位整数:
<code class="cpp">#include <stdint.h> // For 'uint64_t' #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 int main() { uint64_t host_int = 123; uint64_t big_endian; // Convert to big-endian big_endian = htobe64(host_int); // Convert back to host byte order host_int = be64toh(big_endian); return 0; }</code>
此示例将使用适当的特定于平台的函数在 Linux、FreeBSD 和 OpenBSD 上执行 64 位整数转换。
以上是如何在 C 中将 64 位整数从 Big Endian 转换为 Little Endian ?的详细内容。更多信息请关注PHP中文网其他相关文章!