将float32的内容传递给C中的int32

时间:2013-11-15 09:53:43

标签: c embedded

问题:

我想将float32变量的所有内容传递给int32但是执行以下操作:

float32 source;
int32 destination;

source = 23.59463;         // Hex = 0x41BCC1CE 
destination = 0;           // Hex = 0x00000000
destination = source;      // Destination = 0x00000017 = 23 

这不会传递所有内容。我已经尝试过转换,并尝试间接获取内容,但后来我遇到指针类型的问题。

问题:

1)如何将float32的所有内容都抓到int32中?

4 个答案:

答案 0 :(得分:2)

如果你想要一个字节的副本,那就是

assert(sizeof(source) == sizeof(destination));
memcpy(&destination, &source, sizeof(source));

答案 1 :(得分:2)

作为替代答案,指针总是很有趣:

destination = *(int32*)&source;

答案 2 :(得分:1)

当您执行作业destination = source时,source变量已投放为整数,从而被截断。

克服此问题的一种方法是使用union

union U
{
    float32 f;
    int32   i;
};

union U u;
u.f = 23.59463;
printf("%08x\n", u.i);

注意:如果您打算发送此整数(通过网络或串行通信),则必须记住不同的平台具有不同的endianness

答案 3 :(得分:1)

如果“所有内容”表示所有数字,则可以将源相乘以获得固定点目的地。

destination = source * 100000;//23.59463 * 100000 = 2359463