Предполагая, что k
является кратным 8
, предполагая, что "каждый элемент является двоичным", вы подразумеваете "каждый int
равен 0
или 1
", также принимая биты в data
упакованы от наиболее значимых до наименее значимых, а байты new_data
упакованы как big-endian (все разумные предположения), тогда вот как вы это делаете:
for (int i = 0; i < k/8; ++i)
{
new_data[i] = (data[8*i ] << 7) | (data[8*i+1] << 6)
| (data[8*i+2] << 5) | (data[8*i+3] << 4)
| (data[8*i+4] << 3) | (data[8*i+5] << 2)
| (data[8*i+6] << 1) | data[8*i+7];
}