请考虑以下代码:
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, &float_value, sizeof float);
然后您可以使用对象表示的字节来构建您想要的 int
。
但是使用 Stephen Canon 提到的固定宽度整数更好 - 除非你有一个奇怪的 float
大小。
关于c - 使用 memcpy 避免陷阱表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8527275/