从 8 位转换为 1 字节

2024-01-28

我有一个 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
}

编辑:我的位数组在数组中包含“1”和“0”!抱歉没说清楚。

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


sum += bits[i];

如果您尝试转换 Cstring(例如,"1010101"),此代码添加了 char(例如 48 和 49)的代码表值(ASCII、UTF-8,无论您拥有哪种编码),而不是1 and 0。你应该将其重写为

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

另外,您没有初始化bits数组 - 在初始化之前使用其内容会导致未定义的行为,因此您可以anything即将发生。

此外,您的代码逻辑有缺陷 - 一,您必须进行左移before添加二进制数字。第二,向后遍历字符串;线

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

确实应该是

for (int i = 0; i < 8; i++)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 8 位转换为 1 字节 的相关文章

随机推荐