-2

「ビット」に連結された 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);
}
4

1 に答える 1

0

考えられる問題:

shold"hello"の場合はstd::bitset<8>(s[i])0 になります。「1」と「0」のみを含む文字列をビットセット コンストラクターに渡す必要があります。

ビットセットが適切に初期化されると、関数を使用してそれらを一緒に追加することはできません。これは表現をto_string()連結するだけです: "1011" + "1100""10111100"

ああ、待って、多分それがあなたが望んでいることです。
16ビットの数値として解釈されるASCII値のペアを合計する複雑な方法を発明しているように聞こえますが、明確ではありません。あなたのコードは、次のようなものとほぼ同等です。

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
}
于 2013-11-08T15:16:40.837 に答える