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);
我想知道我们是否可以将一个包含 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);