Стои вызывает ошибку вне диапазона

У меня есть этот код, который дает мне ошибку terminating with uncaught exception of type std::out_of_range: stoi: out of range

который я определил как вызванный линией long ascii = std::stoi(temp_string);

как насчет того, как я использую stoi вызывает это и как я могу это исправить?

std::string encode(std::string message){
std::string num_value;
long cipher;
if(message.length() < 20){
  for(int i = 0; i < message.length(); ++i){
    int temp = (char) message.at(i); 
    num_value += std::to_string(temp); 
  }
  return num_value;
}
else{
    int count = 0;   
    std::string temp_string;
    for(int i = 0; i < message.length(); ++i){
      int temp = (int)  message.at(i);
      temp_string += std::to_string(temp);           
      count++;   
       if(count == 20){
         count = 0;
         //add cipher encrypt
         long ascii = std::stoi(temp_string);
         //cipher = pow(ascii, 10000);
         //add n to cipther encrypt
         //add cipherencrypt + n to num_value
         //reset temp_string
         temp_string += "n";

         temp_string = ""; 

      }
 }
return num_value;
}

int main(){
  std::string s = "Hello World my t's your name aaaaaaaaaaaaa?";
  std::cout<<"encoded value : "<< encode(s)<<std::endl;
}

1 ответ

std::stoi возвращает целое число; Похоже, ваш номер слишком велик для целого числа. Попробуйте вместо этого использовать std::stol (см. Здесь).

Также, если вы намереваетесь сделать код переносимым (используемым с различными компиляторами / платформами), имейте в виду, что целые и длинные не имеют стандартного размера. Если минимальный размер, заданный стандартом, не достаточен, вы можете захотеть использовать intX_t (где X - нужный размер), как указано в заголовке cstdint.

Другие вопросы по тегам