请考虑以下代码:
float float_value = x; // x is any valid float value int int_value = 0; size_t size = sizeof(int) < sizeof(float) ? sizeof(int) : sizeof(float); memcpy(&int_value,&float_value,size);
据我所知,这可能会导致陷阱表现.我的问题:
这是真的吗
>如果不是,为什么?
>如果没有,是否有另一种避免陷阱表现的方法?
解决方法
受制裁的方式不会产生任何陷阱的表现
unsigned char obj[sizeof float]; memcpy(obj,sizeof float);
然后可以使用对象表示的字节来构建您想要的int.
但是如斯蒂芬·佳能所提到的使用固定宽度整数更好 – 除非你有一个奇怪的浮动大小.