Похоже практически все встроенные функции ожидают '\0' на конце входного буфера, что не ваш случай.
Единственное исключение, которое я нашел -
std::from_chars. Только оно далеко не везде доступно и надо подключать charconv.
Еще можно руками, если точно известно, что никаких ошибок в числе нет:
unsigned int vtoi(const std::vector<char> &a) {
unsigned int res = 0;
for (const auto& c: a) {
res = 10*res + static_cast<unsigned int>(c) - static_cast<unsigned int>('0');
}
return res;
}
Проверки на переполнение и левые символы добавьте сами, если надо.