gpt4 book ai didi

c++ - 从 8 位转换为 1 字节

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:30 27 4
gpt4 key购买 nike

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

如果您正在尝试转换 C 字符串(例如,"1010101"),此代码会添加代码表值(ASCII、UTF-8,以任何一个为准) char 的编码)(例如 48 和 49),而不是 10。您应该将其重写为

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

此外,您没有初始化 bits 数组 - 在初始化之前使用它的内容会导致未定义的行为,因此您可以期望 任何 发生。

此外,您的代码逻辑存在缺陷 - 第一,您必须在 添加二进制数字之前进行左移。第二,你正在向后遍历字符串;线路

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

应该是

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

关于c++ - 从 8 位转换为 1 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com