首页 >后端开发 >C++ >如何在 C 语言中除了 ntohl() 之外转换 64 位整数?

如何在 C 语言中除了 ntohl() 之外转换 64 位整数?

Barbara Streisand
Barbara Streisand原创
2024-10-30 11:27:27493浏览

How to Convert 64-Bit Integers in C   Beyond ntohl()?

C 中的 64 位整数转换:超越 ntohl()

htonl() 函数(如其文档所建议的那样)是有限的到 32 位整数的转换。但是,在需要 64 位转换的情况下,有多种选项可用。

标准库函数

适用于 Linux (glibc >= 2.9) 和 FreeBSD ,htobe64() 函数可用于将 64 位整数从大端转换为小端。此函数是标准 C 库的一部分。

基于联合的方法

或者,您可以使用联合在 64 位整数和 8 字节之间进行转换字符数组。此方法涉及手动交换大端平台的字节。

预处理器宏

要隐藏特定于平台的差异并提供统一的方法,您可以使用以下方法预处理器代码:

<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>

此代码在 Linux、OpenBSD、FreeBSD 和 NetBSD 上提供 Linux/FreeBSD 风格的宏。

示例用法

为了演示推荐方法的用法,请考虑以下代码:

<code class="cpp">#include <stdint.h>    // For 'uint64_t'

int main() {
  uint64_t host_int = 123;
  uint64_t big_endian;

  big_endian = htobe64(host_int);
  host_int = be64toh(big_endian);

  return 0;
}</code>

此代码将 64 位整数 host_int 在小端到大端之间进行转换,从而有效地保留其值。

以上是如何在 C 语言中除了 ntohl() 之外转换 64 位整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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