问题:
我想将float32变量的所有内容传递给int32但是执行以下操作:
float32 source;
int32 destination;
source = 23.59463; // Hex = 0x41BCC1CE
destination = 0; // Hex = 0x00000000
destination = source; // Destination = 0x00000017 = 23
这不会传递所有内容。我已经尝试过转换,并尝试间接获取内容,但后来我遇到指针类型的问题。
问题:
1)如何将float32的所有内容都抓到int32中?
答案 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