从8位转换为1位

use*_*081 4 c++ byte bit-shift

我有一个8位的字符串,我想将其转换为1个字节.我不确定为什么我的功能不能正常工作.我将8位存储到8个无符号字符的数组中.到目前为止这是我的方法:

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
}
Run Code Online (Sandbox Code Playgroud)

编辑:我的数组在数组中包含'1'和'0'!对不起,不清楚.

可能有人知道我在哪里出错了吗?我不确定为什么我的位没有正确转换为字节.有人可以帮忙吗?谢谢!

小智 5

sum += bits[i];
Run Code Online (Sandbox Code Playgroud)

如果您正在尝试转换C 字符串(例如,"1010101"),此代码会添加char的codetable值(ASCII,UTF-8,无论您使用哪种编码)(例如,48和49),而不是10.你应该把它重写为

sum += bits[i] - '0';
Run Code Online (Sandbox Code Playgroud)

此外,您不初始化bits数组 - 在初始化之前使用其内容导致未定义的行为,因此您可以表达任何事情.

此外,您的代码逻辑存在缺陷 - 第一,您必须添加二进制数字之前执行左移.二,你正在向后穿过绳子; 这条线

for (int i = 7; i >= 0; i--)
Run Code Online (Sandbox Code Playgroud)

应该真的

for (int i = 0; i < 8; i++)
Run Code Online (Sandbox Code Playgroud)