我需要帮助添加在'bits'中连接的16位。每次连接一组16位时,我希望将它们(二进制加法)添加到数组中......直到我的字符串中的所有16个数组都完成。如果存在溢出,则最终总和的长度> 16 ...然后将该额外位添加到最终总和为0000000000000001(其中1是第16位)。
输入的字符串:“hello”
std::vector<std::string> bitvec;
std::string bits;
for (int i = 0; i < s.size(); i += 2) {
bits = std::bitset<8>(s[i]).to_string() + std::bitset<8>(s[i + 1]).to_string();
bitvec.push_back(bits);
}
答案 0 :(得分:0)
可能出现的问题:
如果s
成立"hello"
,则std::bitset<8>(s[i])
将为0.您需要将仅包含“1”和“0”的字符串传递给bitset constructor
正确初始化您的位集后,您无法使用to_string()
函数将它们添加到一起,只会连接表示形式:"1011" + "1100"
将变为"10111100"
哦,等等,也许这就是你想要的 听起来有点像你正在发明一种复杂的方法来将ascii值对被解释为16位数,但目前尚不清楚。您的代码大致相当于:
std::vector<uint16_t> bitvec;
unsigned char* cp = s.c_str()+1;
while (*cp) {
uint16_t bits = *(cp-1)>>8 + *(cp);
bitvec.push_back(bits);
}
//sum over the numbers contained in bitvec here?
uint32_t sum=0;
for(std::vector<int16_t>::iterator j=bitvec.begin();j!=bitvec.end();++j) {
sum += *j;
uint16_t overflow = sum>>16; //capture the overflow bit, move it back to lsb
sum &= (1<<16)-1; //clear the overflow
sum += overflow; //add it back as lsb
}