Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带或左移_C - Fatal编程技术网

C 带或左移

C 带或左移,c,C,显然,帧长度在协议中以第2和第3字节发送。该表达式从2个字节构建16位整数 *(pbBuffer+x)与pbBuffer[x]相同,因此字节#1左移8,字节#2添加到其中 如果您在pbBuffer中接收到,例如{0000 0000,0101 0101,1100 1100,…}(二进制),则将提取两个字节 i2c_receiveData(psDevice, prgDataRecv, &unRegLen); 计算结果将是: *(pbBuffer+1) = 0101 0101 *(pbBuf

显然,帧长度在协议中以第2和第3字节发送。该表达式从2个字节构建16位整数

*(pbBuffer+x)
pbBuffer[x]
相同,因此字节#1左移8,字节#2添加到其中

如果您在
pbBuffer
中接收到,例如
{0000 0000,0101 0101,1100 1100,…}
(二进制),则将提取两个字节

i2c_receiveData(psDevice, prgDataRecv, &unRegLen);
计算结果将是:

*(pbBuffer+1) = 0101 0101
*(pbBuffer+2) = 1100 1100

*(pbBuffer+1)显然,帧长度在协议中以第2和第3字节发送。该表达式从2个字节构建16位整数

*(pbBuffer+x)
pbBuffer[x]
相同,因此字节#1左移8,字节#2添加到其中

如果您在
pbBuffer
中接收到,例如
{0000 0000,0101 0101,1100 1100,…}
(二进制),则将提取两个字节

i2c_receiveData(psDevice, prgDataRecv, &unRegLen);
计算结果将是:

*(pbBuffer+1) = 0101 0101
*(pbBuffer+2) = 1100 1100

*(pbBuffer+1)在这种情况下,“帧长度”似乎存储在传递的缓冲区的偏移量1处

它似乎也是一个16位整数

为了得到一个可用的16位整数,必须从缓冲区解包。最好是转换并使用
htons
/
ntohs
,但我认为该体系结构是众所周知的,可移植性不是一个问题

对于输入,比如说,
pbBuffer={0,1,2}
,结果是:

 *(pbBuffer+1) << 8                  = 0101 0101 0000 0000
(*(pbBuffer+1) << 8) | *(pbBuffer+2) = 0101 0101 1100 1100
。。。和或使用
10b

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

100000010b

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

它似乎也是一个16位整数

为了得到一个可用的16位整数,必须从缓冲区解包。最好是转换并使用
htons
/
ntohs
,但我认为该体系结构是众所周知的,可移植性不是一个问题

对于输入,比如说,
pbBuffer={0,1,2}
,结果是:

 *(pbBuffer+1) << 8                  = 0101 0101 0000 0000
(*(pbBuffer+1) << 8) | *(pbBuffer+2) = 0101 0101 1100 1100
。。。和或使用
10b

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

100000010b

将声明拆分为更小的部分:

100000010b = 0x102
*(pbBuffer+1)/*获取pbBuffer指针之外的字节值*/

(*(pbBuffer+1)将语句拆分为更小的部分:

100000010b = 0x102
*(pbBuffer+1)/*获取pbBuffer指针之外的字节值*/

(*(pbBuffer+1)感谢allot提供的详细答案。以上列位帮助我很好地理解感谢allot提供的详细答案。以上列位帮助我很好地理解感谢这意味着帧长度是258?这意味着帧长度是258?