memcpy ing float into int

时间:2016-07-02 14:14:58

标签: c++ c memcpy

我想知道我们是否可以将包含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 ,但输出看起来像垃圾。有人可以帮我解决这个问题。

由于

2 个答案:

答案 0 :(得分:3)

整数和浮点数具有不同的内部表示,而memcpy只是一个按位复制,因此如果您希望以某种方式转换数字,那么它就不会发生。

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

一般来说,使用memcpy是一个坏主意(除此之外,因为它只适用于POD,也因为你遇到了这类问题)。在C ++中应该避免使用C语言。

答案 1 :(得分:1)

不,你不能,但你可以写一个能为你做的功能:

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