### C ++问题将8位填充到char中

std :: string，其长度为8的倍数，前8位为：“10011100”。

``````//Convert each 8 bits of encoded string to bytes
unsigned char c = 0;
for(size_t i = 0; i < encoded.size(); i += 8)
{
for(size_t k = 0; k < 8; k++)
{
c <<= k;
if(encoded.at(i + k) == '1') c += 1;

//Debug for first 8 bits
if(i == 0) cout << "at k = " << k << ", c = " << (int)c << endl;
}
outFile.write(reinterpret_cast<char*>(&c), sizeof(char));
}
``````

``````at k = 0, c = 1
at k = 1, c = 2
at k = 2, c = 8
at k = 3, c = 65
at k = 4, c = 17
at k = 5, c = 33
at k = 6, c = 64
at k = 7, c = 0
``````

#### 1 个答案:

``````at k = 0, c = 1
at k = 1, c = 2
at k = 2, c = 8
``````

``````input = 10011100
c = 0

`k=0, b=1` shift by 0 add 1 => `c = 1`, dec = 1
`k=1, b=0` shift by 1 add 0 => `c = 10`, dec = 2
`k=2, b=0` shift by 2 add 0 => `c = 1000`, dec = 8
``````

b表示“当前位”。您可能不希望按`k`转换`1`？如果您寻找标准C ++解决方案，可以使用`std::bitset`

``````std::bitset<8> bits("10011100");
unsigned char c = bits.to_ulong();
``````

``````outFile.put(c);
``````