我需要将网络字节顺序的结构s1以主机字节顺序复制到另一个结构s2
我看到以下两种方法给出了不同的输出。我认为method2是正确的方法。 我对么 ?如果是,我不明白为什么不同的产出。 memcpy可能在这里扮演一个角色?
struct abc
{
int a;
int b;
int c;
} ;
struct abc s1 = {0x58,0x20,0x30};
struct abc s2;
方法1:
memcpy (&s2,&s2,sizeof(s1));
/* NOTE I read from s2 itself in ntohl */
s2.a= ntohl(s2.a);
s2.b= ntohl(s2.b);
s2.c= ntohl(s2.c);
printf("a %x b %x c %x\n",s2.a,s2.b,s2.c);
方法2:
/* read directly from s1 */
s2.a= ntohl(s1.a);
s2.b= ntohl(s1.b);
s2.c= ntohl(s1.c);
printf("a %x b %x c %x\n",s2.a,s2.b,s2.c);
答案 0 :(得分:2)
应该是
memcpy (&s2,&s1,sizeof(abc));
而不是
memcpy (&s2,&s2,sizeof(s1));
但鉴于abc是POD,我认为使用memcpy没有任何好处,除非它容易出错,你可以写
s2 = s1;
而不是(默认赋值运算符将正常工作,因为abc中没有指针)。