Обратите внимание, что они, скорее всего, будут выводить почти такую же или ту же сборку, что и алгоритм, поэтому алгоритм, подобный другому, почти всегда предпочтителен.Тем не менее, вот еще несколько вариантов, использующих циклы:
std::stoul
- требуется как минимум C ++ 11.Мы также не проверяем границы здесь, мы предполагаем, что все строки имеют размер >=
2.
std::string str1[] = {"0b01100101", "0b01100101", "0b01011101", "0b11001111"};
const size_t sz = sizeof str1 / sizeof *str1;
uint8_t str2[sz];
for (size_t i = 0; i < sz; ++i)
str2[i] = static_cast<uint8_t>(std::stoul(&str1[i][2], nullptr, 2));
Поскольку в действительности это, скорее всего, массивы переменного размера, вам может быть лучше использоватьфактический vector
введите здесь.
std::vector<std::string> vs;
// add a bunch of stuff to vs
...
std::vector<uint8_t> vi;
vi.reserve(vs.size());
for (const auto &s : vs)
vi.push_back(static_cast<uint8_t>(std::stoul(&s[2], nullptr, 2)));