【问题标题】:Conversion of uchar array to uint8 type pointerchar数组到uint8类型指针的转换
【发布时间】:2014-04-30 12:28:58
【问题描述】:

我想将一个 uchar 数组转换为 uint8 指针。由于两者都是 8 位,值范围从 0 到 255,所以我认为它不应该引起和问题。

uchar list[100];

我必须将上面的列表传递给一个接受指向 uint8t 的指针的函数。 我可以这样通过吗:

(uint8t *)list

这样当我将其读取为 uint8 时它不会影响该值。

【问题讨论】:

  • 应该可以,试一试。
  • 是的,如果你说的是标准类型uint8_t,那很好,也很正确。
  • 这违反了严格的别名规则。
  • 好吧,如果你的意思是 unsigned char 和 unicode char,通常应该没问题。标准说 char 应该至少 8 位宽,以允许 C 编译器在将 9、10、12、16 等位视为 char 的机器上更简单,但我的猜测是你可能不会在这样的机器上运行它.
  • 另外,正如 ajay 提到的,google 严格的别名规则

标签: c pointers char uint8t pointer-conversion


【解决方案1】:

好吧,ucharuint8_t 的宽度不一定相同!从技术上讲,一个字符可以是 16 位宽。这是一种罕见的情况,但它会发生,尤其是在嵌入式世界中。所以 uchar 可能不是 8bit 类型,但 uint8 总是是 8bit 类型。

如果uchar 确实不是一个字节,则从uchar [] 转换为uint8_t * 消除了对齐限制。对于不支持未对齐访问的平台(闻起来像再次嵌入!)尝试像这样进行投射将是一个错误。如果您使用GCC 编译,请添加-Wcast-align 标志以捕获此类问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    相关资源
    最近更新 更多