ネットワーク バイト オーダーの構造 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);