gpt4 book ai didi

c - 用或左移

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:00 24 4
gpt4 key购买 nike

i2c_receiveData(sDevice *psDevice, byte_t *pbBuffer, uint16_t *puiLen)
{
.
.
//extract the packet data length
unFrameLen = (*(pbBuffer+1) << 8) | *(pbBuffer + 2);
if(unFrameLen > *puiLen)
unFrameLen=*puiLen;
.
.
}

这里这个语句是如何找到帧长度的?

unFrameLen = (*(pbBuffer+1) << 8) | *(pbBuffer + 2);

这里的pbBuffer是一个指向unsigned char数组的指针。

调用函数是,

i2c_receiveData(psDevice, prgDataRecv, &unRegLen);

最佳答案

在这种情况下,“帧长度”似乎存储在传递的缓冲区中的偏移量 1 处。

它似乎也是一个 16 位整数。

为了获得可用的 16 位整数,您必须从缓冲区中解压缩。转换并使用 htons/ntohs 会更好,但我认为架构是众所周知的,可移植性不是问题。

例如,对于 pbBuffer = {0, 1, 2} 的输入,这最终是:

(1 << 8) | 2;

... 给出:

(00000001b << 8) | 00000010b

...将 1b 左移 8 位给出:

100000000b

... 并与 10b 进行 OR 运算:

100000010b

现在您从 pbBuffer[1..2] 中的两个 8 位整数中得到一个 16 位整数:

100000010b = 0x102

关于c - 用或左移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208877/

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