【问题标题】:How using stdint.h has advantage if portability?如果可移植性,使用 stdint.h 有何优势?
【发布时间】:2022-11-16 01:12:38
【问题描述】:

我读到 stdint.h 用于可移植性,但我很困惑。

如果我在 32 位系统上编写程序,则 uint32_t(无符号整数)为 4 个字节。

但是这个程序在16位系统上运行时,int是2bytes,uint32_t(unsigned int)是2bytes。

我认为在这种情况下不能保证可移植性。 有什么我理解错了吗?

【问题讨论】:

  • uint32_t 始终为 32 位。这就是为什么它的名称中有 32 个。
  • 什么16位系统?您如何确定 uint32_t 是 2 个字节?请edit您的问题包括这些详细信息

标签: c stdint


【解决方案1】:

有什么我理解错了吗?

是的。

输入uint32_t总是一个无符号整数类型,恰好有 32 位,没有填充位。在许多现代系统上对应于类型 unsigned int,但在其他系统上它可能对应于不同的类型,例如 unsigned long int。在没有具有正确属性的类型的系统上,根本没有定义它。

uint32_t 和来自stdint.h 的其他显式宽度数据类型的要点正是为了解决您提出的问题,即(例如)unsigned int 在不同的机器上具有不同的大小。

【讨论】:

    【解决方案2】:

    uint32_tuint16_t 是与 int 不同的类型。

    虽然 int 的大小可能会有所不同,但 uint32_t 始终是 32 位,而 uint16_t 始终是 16 位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多