Во-первых, я не стал бы делать ввод в ch[13] из cin - может статься, пользователь введёт больше символов. Испортишь память. Если хочешь использовать статический массив из unsigned char и прочитать столько, сколько нужно, то лучше использовать метод get:
std::cin.get((char*)ch, 12);
Кстати, ch[13] - массив из 13 элементов

Второе. Когда ты делаешь в цикле
у тебя не обязательно прочитаются все 8 бит. Как только закончатся ненулевые, из цикла выйдет. Например в числе 00011001 прочитает только 5 бит. i изменится соответственно.
Третье. А потом ты выводишь всё с конца (т.е., начиная с последнего числа и заканчивая 1м) - хотя, может, всё так и задумано

P.S. от себя: советую поаккуратнее форматировать код. А то пляшет по строчкам - читать трудновато.