在uint8_t *和char *之间进行转换。怎么了?

时间:2011-05-10 22:16:36

标签: objective-c c string casting

在这两者之间就终止角色进行投射时会发生什么?在C99 Objective-C。

2 个答案:

答案 0 :(得分:4)

我认为在这个答案中你的系统中的字符是8位。

如果您的架构使用unsigned char作为char类型,则绝对不会发生任何事情。

如果您的架构使用signed char作为char类型,那么char的负值将会回绕,从而导致可能出现意外结果。但是,终止空字符永远不会发生这种情况。


请注意,通过“强制转换”没有任何实际发生,您只需告诉编译器以不同方式解释内存中的某个位置。这种解释上的差异会产生演员的实际(侧面)效果。

答案 1 :(得分:0)

如果charuint8_t是兼容类型(它们应该在大多数当前台式计算机上),那么指向该类型对象的指针具有相同的表示和对齐要求,因此转换应该没有问题(隐式地,或明确地使用演员表)彼此之间。

如果它们兼容,那么指向的值应该被平等对待,无论它们被解释为什么类型。

注意:我并非100%确定uint8_tchar与签名字符的实现兼容。

如果类型不兼容,则调用未定义的行为,任何事情都可能发生:很可能发生的事情是,所有内容都“按预期”工作 - 但不能保证它始终可以正常工作< /强>