关于这个问题
Convert from uint8_t * to char * in C个
这个建议只是简单地用(char*)来投.在这种情况下,这为什么是可以接受的?还是应答者只是按字面意思回答问题?
将未签名(取决于实现)转换为已签名感觉很可疑.
关于这个问题
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_t
是unsigned char
的别名(至少在CHAR_BIT
为8的系统上是如此),因此允许将uint8_t *
转换为char *
,然后取消对结果指针的引用.
还请注意,根据上面的最后一个要点,允许使用指针any字符类型访问任何类型的对象.