memcpy 将 float 转换为 int

memcpy ing float into int

我想知道我们是否可以将一个包含 2 个 float 变量的结构 memcpy 到另一个包含 2 个 int 变量的结构中。这是我到目前为止写的

struct stFloat
{
float a;
float b;
};


struct stInt
{
int a;
int b;
};


int main()
{
struct stFloat aa;
aa.a=12.234;
aa.b=673.797;

struct stInt bb;

memcpy(&bb,&aa,sizeof(stFloat));

printf("%d %d\n",bb.a,bb.b);

return 0;
}

但不幸的是我没有得到想要的结果。我期待的输出是 12 673 但输出看起来像一些垃圾。谁能帮我解决这个问题。

谢谢

整数和浮点数具有不同的内部表示,memcpy 只是按位复制,因此如果您希望以某种方式转换数字,则不会发生这种情况。

相反,您需要自己完成,例如通过声明允许您将 stfloats 分配给 stint 的构造函数或函数或赋值运算符。这也允许您明确指出您想要的转换。

一般来说,使用 memcpy 是个坏主意(除其他外,因为它只适用于 PODs,也因为你会遇到这类问题)。这是在 C++ 中应该避免的 C 事物。

不,你不能,但你可以编写一个函数来为你做这件事:

void cpy(struct stFloat *src, struct stInt *dest){
dest->a = (int)src->a;
dest->b = (int)src->b;
}

然后,通过 references 指针传递您的结构来调用它(否则它只会对结构的副本起作用):

struct stFloat f;
struct stFloat i;

cpy(&f,&i);