首页  >  文章  >  后端开发  >  如何在 C 中将 64 位整数从 Big Endian 转换为 Little Endian ?

如何在 C 中将 64 位整数从 Big Endian 转换为 Little Endian ?

Linda Hamilton
Linda Hamilton原创
2024-10-30 07:51:02968浏览

How to Convert 64-Bit Integers from Big Endian to Little Endian in C  ?

C 语言中从 Big Endian 到 Little Endian 的 64 位整数转换

标准 C 函数 ntohl() 将 32 位整数转换为网络字节顺序(大端)到主机字节顺序(小端),反之亦然。然而,在某些平台上需要转换 64 位整数(特别是 unsigned long long 值)。

不幸的是,C 标准没有提供用于 64 位整数转换的专用函数。但是,存在特定于平台的实现。

特定于平台的解决方案

  • Linux 和 FreeBSD: htobe64 和 be64toh 在 < 中定义;endian.h>;用于 64 位整数转换。
  • OpenBSD: 自定义宏 be16toh、be32toh 和 be64toh 可在 中使用用于字节顺序转换。

代码示例

以下代码可用于在各种平台上转换 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn