是否可以从uint8_t* 转换为char*

pbpqsu0x  于 2024-01-06  发布在  其他
关注(0)|答案(1)|浏览(143)

关于这个问题
Convert from uint8_t * to char * in C
这个建议只是简单地用(char*)进行强制转换。为什么在这种情况下可以接受?或者回答者只是按字面意思理解问题?
将unsigned(取决于实现)转换为signed感觉很可疑。

eni9jsuy

eni9jsuy1#

在C中,允许通过指向该类型的有符号或无符号版本的指针访问给定类型的变量。
这在C standard的第6.5p7节中规定:
对象的存储值只能由具有以下类型之一的左值表达式访问:

  • 与对象的有效类型兼容的类型,
  • 与对象的有效类型兼容的类型的限定版本,
    *对象有效类型对应的有符号或无符号类型的类型
  • 类型,该类型是与对象的有效类型的限定版本相对应的有符号或无符号类型,
  • 在其成员中包括上述类型之一的聚合或联合类型(递归地包括子聚合或包含联合的成员),或者
  • 字符类型。

uint8_tunsigned char的别名(至少在CHAR_BIT为8的系统上是这样),因此允许将uint8_t *转换为char *,然后解引用结果指针。
还要注意的是,根据上面的最后一个要点,使用指针 * 任何 * 字符类型可以访问任何类型的对象。

相关问题