0

问题:

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

float32 source;
int32 destination;

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

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

问题:

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

4

4 回答 4

2

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

assert(sizeof(source) == sizeof(destination));
memcpy(&destination, &source, sizeof(source));
于 2013-11-15T09:55:40.367 回答
2

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

destination = *(int32*)&source;
于 2013-11-15T14:38:31.690 回答
1

当您进行赋值destination = source时,source变量被强制转换为整数,从而被截断。

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

union U
{
    float32 f;
    int32   i;
};

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

注意:如果你打算发送这个整数(通过网络或串行通信),那么你必须记住不同的平台有不同的字节序

于 2013-11-15T09:57:52.413 回答
1

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

destination = source * 100000;//23.59463 * 100000 = 2359463
于 2013-11-15T10:08:54.953 回答