最近学习C语言知识,从网上收集了一些内容,自己也总结了一些,感觉这几题有点意思,有兴趣的可以自己试试:
1、字节对齐问题:
几道C语言题目,有兴趣的可以自己动手试试
几道C语言题目,有兴趣的可以自己动手试试
#pragma pack(4)
几道C语言题目,有兴趣的可以自己动手试试typedef 
struct _S_1
 pack()
问:sizeof(S_2)为多少?
展开,上面有两个pack(N),随意修改这个N,结果又会是什么?例如:一个是1,一个是4,两个都是4,两个都是1,或者其它任意组合,结果是多少?
最简单的方法是上机去试试,但也要明白原理!

2、位域问题:
几道C语言题目,有兴趣的可以自己动手试试#pragma pack(1)
几道C语言题目,有兴趣的可以自己动手试试typedef union _Message
}
问:在小字节序下,结果是多少?在大字节序下,结果又是多少?
如果不明白什么是字节序,那就直接回答,在Intel的CPU下结果是多少就行了。
注意:这里必须使用pack(1),否则结果并不是预期的样子。而且b,c,d,e,f,必须定义成short,如果不是short是其它的数据类型,结果又会不一样!

两个问题都可以在VC下进行测试,有兴趣的自己动手试试,体会一下!
第二题无法演示在大字节序下的情况,因此无法演示结果,只能看理论上解答!

答案(最好是自己理论求解再来用VC来验证):
1:20
2:07196601(小字节序);01714607(大字节序)
     
应用场景:不要觉得这样的题目很变态,实际上它的应用场景是很多!
例如一个以太网的帧格式,它有2个48bit的MAC地址,还有一些报文类型,用4个bit来表示,还有其它的一些信息,都不是用byte来表示的,而是用几个bit表示。如何定义这样的以太网帧格式,就会与上面的问题相关了。而且网络中传输的数据是采用的大字节序,而我们一般的PC机,或者说是兼容Intel CPU的机器,都是小字节序,所以要注意转化一下,否则定义出来的结构也并不是我们想要的。
而字节对齐的应用在网络的消息报文中也经常遇到。但一般情况下都是采用的自然对齐,这样在网络中进行数据交换时,如果采用的对齐方式不一致,可能出现数据对齐的问题。

相关文章:

  • 2022-02-25
  • 2021-07-02
  • 2021-08-23
  • 2021-06-18
  • 2022-12-23
  • 2022-02-14
猜你喜欢
  • 2022-01-25
  • 2022-12-23
  • 2022-03-05
  • 2022-12-23
  • 2022-02-03
  • 2021-07-18
  • 2022-02-02
相关资源
相似解决方案