这段C代码的某些部分对我来说没有意义

前端之家收集整理的这篇文章主要介绍了这段C代码的某些部分对我来说没有意义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨考虑这段代码
uint16_t dest_pid;
uint8_t *p;

pf->dest_pid = p[0] + (p[1] << 8)   //(p[1] << 8) equals 0 right?

代码是嵌入式操作系统驱动程序的一部分.
一些想法可能是该声明背后的想法?或者可能是我遗失了一些必要的东西?

解决方法

首先:pf之后的dest_pid是结构的一部分,我认为它是另一个变量,然后是uint16_t dest_pid;

第二:p是指向uint8_t的指针,当你执行(p [1]<< 8)时,你将指针内部的内容移动8,例如,如果移位后p [1] = 0xE5将是0xE500.请记住,将结果放在dest_pid中,这是一个2字节的变量. 最后一行的转换最有可能采用pid的低字节(不太重要)并将其添加到pid的高字节(移位8)并将其放入pf-> dest_pid中,你可能会想到为什么他没有从一开始就发送2个字节,原因可能是因为他从一个总线上获取它,每个单位时间(周期)只发送一个字节.

猜你在找的C&C++相关文章