我正在使用 C 实现将通过无线发送的数据包流,但遇到以下问题。我有一个 unsigned int 2 字节长,二进制格式如下: XXXX YYYY XXXX XXXX,其中 X 和 Y 是位。
查看上面的格式,我只需要更改 YYYY 位,而将其他位保留在数据包结构中。
我已经尝试过移位和屏蔽,但似乎没有任何效果。
我不只是在寻找一个可以复制/粘贴的解决方案。我想学习如何让它工作的方法,最后决定在这里发帖。
任何正确方向的帮助或指导都会很棒。
谢谢!
最佳答案
假设您想用 ZZZZ 替换 YYYY 位。
首先需要清除原始值中的YYYY位。这可以通过以下方式完成:
oldvalue & 0xF0FF
它给你 XXXX 0000 XXXX XXXX
。
接下来,您需要使用新的 ZZZZ 位并将它们向左移动,其中:
z << 8
给出 0000 ZZZZ 0000 0000
。
最后,您需要使用 or 运算符组合这两个值:
(oldvalue & 0xF0FF) | (z << 8)
它给你 XXXX ZZZZ XXXX XXXX
。
关于更改数据包流中的特定字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781908/