I have an uint8_t and I need to read/write to specific bits. How would I go about doing this. Specifically what I mean is that I need to write and then later read the first 7 bits for one value and the last bit for another value.
edit: forgot to specify, I will be setting these as big endian
You're looking for bitmasking. Learning how to use C's bitwise operators: ~, |, &, ^ and so on will be of huge help, and I recommend you look them up.
Otherwise -- want to read off the least significant bit?
uint8_t i = 0x03;
uint8_t j = i & 1; // j is now 1, since i is odd (LSB set)
and set it?
uint8_t i = 0x02;
uint8_t j = 0x01;
i |= (j & 1); // get LSB only of j; i is now 0x03
Want to set the seven most significant bits of i to the seven most significant bits of j?
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
Want to read off these bits of i?
i & ~(1);
Want to read the Nth (indexing from zero, where 0 is the LSB) bit of i?
i & (1 << N);
and set it?
i |= (1 << N); // or-equals; no effect if bit is already set
These tricks will come in pretty handy as you learn C.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With