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