Converting from 8 bits to 1 byte

bit-shift, byte, c++

Solution

sum += bits[i];

If you're trying to convert a C string (for example, `"1010101"`), this code adds the codetable value (ASCII, UTF-8, whichever encoding you have) of the char (for example, 48 and 49), not `1` and `0`. You should rewrite this as

sum += bits[i] - '0';

Also, you don't initialize the `bits` array - using its contents before initialization results in undefined behavior, so you can expact anything to happen.

Furthermore, your code logic is flawed - One, you have to do the left shift before adding the binary digit. Two, you're traversing the string backwards; the line

for (int i = 7; i >= 0; i--)

should really be

for (int i = 0; i < 8; i++)

Problem

I have a string of 8 bits and I want to convert it into 1 byte. I am not sure why my function is not working properly. I have 8 bits stored into an array of 8 unsigned chars. This is my method so far: ``` unsigned int bitsToBytes(unsigned char *bits) { unsigned int sum = 0; for(int i = 7; i >= 0; i--) { sum += bits[i]; sum<<=1; } return sum; } int main() { unsigned char bits[8]; unsigned int byt; byt = bitsToBytes(bits); cout << byt; //doesn't give me the right result } ``` EDIT: My array of bits contains '1' and '0' in the array! Sorry for not being clear. Might anyone know where I went wrong in this? I'm not sure why my bits aren't converting to bytes properly. Could anyone help? Thanks!

Original source