我正在使用C来实现将通过无线发送的数据包流,并且遇到了以下问题.我有一个2字节长的unsigned int,格式为二进制:XXXX YYYY XXXX XXXX,其中X和Y是位.
看一下上面的格式,我只需要改变YYYY位并将其他位留在数据包结构中.
我尝试过位移和屏蔽,但似乎没有任何效果.
我不是在寻找一个解决方案,所以我可以复制/粘贴.我想学习如何让它工作的方法,最后决定在这里发布.
任何正确方向的帮助或指导都会很棒.
谢谢!
假设您想用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
.
归档时间: |
|
查看次数: |
79 次 |
最近记录: |