c - 使用 memcpy 避免陷阱表示

标签 c memcpy

请考虑以下代码:

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);

据我所知,这可能会导致陷阱表示。我的问题:

  1. 这是真的吗?
  2. 如果不是,为什么?
  3. 如果不是,是否有其他方法避免可能的陷阱表示?

最佳答案

不会产生任何陷阱表示的认可方式是

unsigned char obj[sizeof float];
memcpy(obj, &float_value, sizeof float);

然后您可以使用对象表示的字节来构建您想要的 int

但是使用 Stephen Canon 提到的固定宽度整数更好 - 除非你有一个奇怪的 float 大小。

关于c - 使用 memcpy 避免陷阱表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8527275/

相关文章:

c - Bresenham 的圆算法

linux - 如何从 Linux 共享库的符号依赖表中剥离符号版本信息?

hardware - 片外内存?

C++ 使用 memcpy 填充结构中的 vector

从共享内存段复制数据会导致客户端出现段错误(信号量和共享内存)

C - 在没有 malloc 的函数中填充通用结构

c - 谁将决定嵌入式 C 编程中数据类型的大小

c - Aarch64 程序集中的系统调用调用

c - 如何在C中指定CPU负载?

c++ - 读取共享内存中的不同数据类型