gpt4 book ai didi

c - memcpy 和 ntohl 不同的输出

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:54 25 4
gpt4 key购买 nike

我需要将网络字节顺序的结构 s1 复制到主机字节顺序的另一个结构 s2

我看到以下两种方法给出了不同的输出。我认为 method2 是正确的做法。我对么 ?如果是,我不明白为什么会有不同的输出。可能 memcpy 在这里发挥了作用?

struct abc
{

int a;
int b;
int c;

} ;

struct abc s1 = {0x58,0x20,0x30};
struct abc s2;

方法一:

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);

方法二:

/* 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);

最佳答案

应该是

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

代替

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

但是考虑到 abc 是 POD,我看不到使用 memcpy 的任何好处,除了它容易出错,你可以只写

s2 = s1; 

相反(默认赋值运算符可以正常工作,因为 abc 中没有指针)。

关于c - memcpy 和 ntohl 不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com