【问题标题】:Underlying type for std::uint8_tstd::uint8_t 的基础类型
【发布时间】:2017-11-24 22:12:50
【问题描述】:

问题
是否有任何 c++ 工具链,其中存在 std::uint8_t,但 notunsigned char(或 char,如果未签名)的 typedef?

编辑: 相反:在符合标准的实施中,这样的事情是否可能?

背景/动机
我主要是问,因为我想知道std::uint8_t* 是否可用于访问单个字节(就像unsigned char*)。是的,我知道std::byte,但这与这里无关。我主要对 x86、arm 和 mips 的工具链感兴趣,但出于好奇,我也想听听其他示例。

【问题讨论】:

  • 有些 DSP 没有八位字节 - 通常,它们只能访问更大字长的内存 - 所以你可能有 16 位 char 而没有 uint8_t at全部。编辑:但重新阅读您的问题,我发现您已经排除了这种情况(您需要uint8_t)。
  • twitter convogcc bug report comment 可能会有所帮助,具体取决于上下文
  • 你为什么不直接使用unsigned char* 来便携地访问单个字节?
  • @Brian:因为它更短;)。主要是因为我正在从事的项目就是这样做的。
  • 另外 - 虽然仍然不理想 - 我确实认为这个名称更适合谈论 classig 8 位字节(我怀疑在 CHAR_BIT != 8 的机器上使用我的代码是否安全)跨度>

标签: c++ standard-library


【解决方案1】:
  1. char 不是无符号整数类型,即使它实际上是无符号的。由于uint8_t 必须是无符号整数类型,它永远不能是char
  2. CHAR_BIT 必须至少为 8,而下一个最小的标准无符号整数类型 unsigned short 必须至少有 16 位。如果uint8_t 存在,那么它必须是“宽度为8 且没有填充位的无符号整数类型”。如果uint8_t 表示标准无符号整数类型,那么它只能是unsigned char
  3. 但是,措辞中没有任何内容阻止uint8_t 表示实现定义的扩展无符号整数类型。但是,我不知道有什么实现可以做到这一点。

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2016-11-30
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多