编辑:我在Objective-C中寻找reinterpret_cast
,因此以下对我的预期问题毫无意义。
Objective-C中是否存在静态强制转换?
e.g。在这个C ++示例中使用
static_cast
是有充分理由的:float rnd = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
我可以考虑使用
union
或指针来直接访问 整数值作为一个浮点数,但这将使代码更多 复杂。我如何方便地在C ++示例中执行相同的操作 目标C?
答案 0 :(得分:2)
目标C是C的超集,所以这样做C方式和简单的演员
float rnd = (float) (rand()) / (float)(RAND_MAX);
答案 1 :(得分:0)
在澄清之后,您在reinterpret_cast
之后:
你是对的,你可以使用union
来做到这一点。如果你想内联,你可以使用强制转换,地址和间接......
(Objective-)C和C ++中的C风格演员(type)expr
的工作方式类似:如果static_cast
的等价物是合适的,那么它就是这样的,例如在int
和float
之间以及其他值类型;否则它将相当于reinterpret_cast
,例如在指针类型之间。
所以你只需要转换为指针,强制转换和间接转换。 E.g:
int z = 0xDEADBEEF;
float y = *(float *)&z;
NSLog(@"%d -> %f", z, y);
是的它有点难看,但是你正在做的事情也是如此;-)为了让它更好一点定义为宏:
#define REINTERPRET(type, expr) (*(type *)&(expr))
你可以用作:
int z = 0xDEADBEEF;
float y = REINTERPRET(float, z);
NSLog(@"%d -> %f", z, y);
与reinterpret_cast
一样,你应该谨慎使用这一点!
HTH