1

ネットワーク バイト オーダーの構造 s1 を、ホスト バイト オーダーの別の構造 s2 にコピーする必要があります。

以下の 2 つの方法では、異なる出力が得られることがわかります。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);
4

1 に答える 1

2

する必要があります

memcpy (&s2,&s1,sizeof(abc));

それ以外の

memcpy (&s2,&s2,sizeof(s1));

しかし、abcがPODであることを考えると、エラーが発生しやすいという事実を除いて、memcpyを使用する利点はありません。

s2 = s1; 

代わりに (abc にはポインターがないため、デフォルトの代入演算子が正常に機能します)。

于 2013-09-16T15:28:44.837 に答える