Платформа - Windows с MSV C. Я пишу функцию распаковки шифрования.
У меня много vector<int>
результатов функции дешифрования. vector<int>
может содержать строку UTF-8, или это может быть мусор, если параметры дешифрования были неправильными. Мне нужно вычесть число из каждой позиции, а затем посмотреть, является ли это допустимой строкой UTF-8. Это схема заполнения : добавьте позицию символа к себе перед шифрованием.
Чтобы отобразить результаты, я предполагаю, что мне нужно преобразовать vector<int>
в vector<char>
. Затем я могу использовать это как const char[]
и распечатать его на консоли.
Как мне справиться с возможностью переполнения и потери значимости при преобразовании в char
? В конце концов, char
подписан и имеет диапазон от -128 до 127 на моей платформе.
std::vector<char> unpad(const std::vector<int>& input) {
std::vector<char> output;
for (int i{ 0 }; i < input.size(); ++i) {
if (input[i] < -128 || input[i] > 127) {
printf("oops overflow\n");
}
output.push_back(static_cast<char>(input[i] - i)); // Padding scheme
}
output.push_back(static_cast<char>(0)); // Null termination
return output;
}