我有一个 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(使用前将#替换为@)