更改数据包流中的某个字节

sky*_*box 0 c

我正在使用C来实现将通过无线发送的数据包流,并且遇到了以下问题.我有一个2字节长的unsigned int,格式为二进制:XXXX YYYY XXXX XXXX,其中X和Y是位.

看一下上面的格式,我只需要改变YYYY位并将其他位留在数据包结构中.

我尝试过位移和屏蔽,但似乎没有任何效果.

我不是在寻找一个解决方案,所以我可以复制/粘贴.我想学习如何让它工作的方法,最后决定在这里发布.

任何正确方向的帮助或指导都会很棒.

谢谢!

Ric*_*arn 6

假设您想用ZZZZ替换YYYY位.

首先,您需要清除原始值中的YYYY位.这可以通过以下方式完成:

oldvalue & 0xF0FF
Run Code Online (Sandbox Code Playgroud)

给你的XXXX 0000 XXXX XXXX.

接下来,您需要使用新的ZZZZ位并将它们移到左侧,使用:

z << 8
Run Code Online (Sandbox Code Playgroud)

这给了0000 ZZZZ 0000 0000.

最后,您需要使用or运算符组合这两个值:

(oldvalue & 0xF0FF) | (z << 8)
Run Code Online (Sandbox Code Playgroud)

给你的XXXX ZZZZ XXXX XXXX.