我有一个 uint8_t,我需要读/写特定位。我将如何去做这件事。具体来说,我的意思是,我需要写入一个值的前 7 位,然后读取另一个值的最后一位。
编辑:忘记指定,我将把它们设置为大端
您正在寻找位掩码。学习如何使用 C 的按位运算符:~
, |
, &
, ^
等等都会有很大的帮助,我建议你查一下。
否则——想读出最低有效位吗?
uint8_t i = 0x03;
uint8_t j = i & 1; // j is now 1, since i is odd (LSB set)
并设置它?
uint8_t i = 0x02;
uint8_t j = 0x01;
i |= (j & 1); // get LSB only of j; i is now 0x03
想要将 i 的 7 个最高有效位设置为 j 的 7 个最高有效位?
uint8_t j = 24; // or whatever value
uint8_t i = j & ~(1); // in other words, the inverse of 1, or all bits but 1 set
想读出 i 的这些位吗?
i & ~(1);
想要读取 i 的第 N 位(从零开始索引,其中 0 是 LSB)吗?
i & (1 << N);
并设置它?
i |= (1 << N); // or-equals; no effect if bit is already set
当您学习 C 语言时,这些技巧将会非常有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)