关于这个问题

Convert from uint8_t * to char * in C

这个建议只是简单地用(char*)来投.在这种情况下,这为什么是可以接受的?还是应答者只是按字面意思回答问题?

将未签名(取决于实现)转换为已签名感觉很可疑.

推荐答案

在C中,允许通过指向给定类型的有符号或无符号版本的指针来访问该类型的变量.

这在第C standard条的第6.5p7节中规定:

对象的存储值只能由左值访问 具有以下类型之一的表达式:

  • 与对象的有效类型兼容的类型,
  • a qualified version of 与对象的有效类型兼容的类型,
  • a type that is the signed or unsigned type corresponding to the effective type of the object
  • 作为与对象的有效类型的限定版本相对应的有符号或无符号类型的类型,
  • 在其成员中包括上述类型之一的聚合或联合类型(递归地包括 子聚合或包含的联合),或
  • 一种字符类型.

uint8_tunsigned char的别名(至少在CHAR_BIT为8的系统上是如此),因此允许将uint8_t *转换为char *,然后取消对结果指针的引用.

还请注意,根据上面的最后一个要点,允许使用指针any字符类型访问任何类型的对象.

C++相关问答推荐

如何将一个enum类型类型转换为另一个类型?

是否定义了数组指针类型转换为指针类型?""""

在C语言中,是否可以使枚举数向后计数?

GCC创建应用于移动项的单独位掩码的目的是什么?

判断X宏的空性

从TCP连接启动UDP(C套接字)

C:在编译时构建和使用字符串文字的预处理器宏?

在C语言中,指针指向一个数组

可变宏不能编译

C将数组传递给函数以修改数组

这个空指针类型的转换是有效代码还是恶意代码?

Zlib:解压缩大文件导致";无效代码长度设置";错误

链接器脚本和C程序使用相同的头文件,这可能吗?

发送和接收的消息中的Unix域套接字不匹配

使用mmap为N整数分配内存

如何编写postgresql支持函数

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据

在链表中插入一个值

C23 中是否有 __attribute__((nonnull)) 的等效项?

将帧从相机 (/dev/video0) 复制到帧缓冲区 (/dev/fb0) 会产生意外结果