更改数据包流中的特定字节

标签 c

我正在使用 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/

相关文章:

c - 强制解锁由不同线程锁定的互斥体

Python ctypes 在 Linux 上从 libc 调用 reboot()

c - gcc std=gnu90 的 size_t 格式警告

c - 执行和评估有什么区别?

C - 调用函数时参数错误

我可以检查在预编译中定义了什么宏吗?

c - 为什么此 printf 显示多个数组元素?

c - GCC/X86,相对跳转问题

c - 如何将文本文件的内容保存到二维数组中?

c - 将多个(离散的)操作折叠成一个(连续的)操作