Конвертировать массив символов в вектор с 4-битными элементами - PullRequest
2 голосов
/ 26 мая 2011

Я хочу использовать следующий сегмент кода

#include <iostream>
#include <iterator>
#include <vector>
#include <bitset>
#include <algorithm> 

int _tmain(int argc, _TCHAR* argv[])
{   
    static const char szBits[] = "110101011010";   
    std::vector<std::bitset<4> > str(szBits, szBits + sizeof szBits);   
    std::copy(str.begin(), str.end(), std::ostream_iterator<std::bitset<4> > (std::cout, "\n")); 

    return 0;
}

чтобы получить вектор с 3 элементами 1101 1010 1010

Но я не могу получить правильный результат того, что ожидал.

Не могли бы вы мне помочь? Спасибо!

1 Ответ

2 голосов
/ 26 мая 2011
std::vector<std::bitset<4> > str(szBits, szBits + sizeof szBits);

Это явно неправильно.Фактически он создает элемент вектора из каждого char вместо 4 char вместе.

Вот что вам следует делать:

static const char szBits[] = "110101011010";   
std::vector<std::bitset<4> > str;
for(size_t i = 0 ; (i + 4) < sizeof(szBits) ; i += 4 )
      str.push_back(std::bitset<4>(std::string(&szBits[i], 4))); 

std::copy(str.begin(), str.end(), std::ostream_iterator<std::bitset<4> > (std::cout, "\n")); 

Вывод:

1101
0101
1010

Демо: http://www.ideone.com/27RNL

...