Pular para o conteúdo

Verificar conversão de tipo em C/C++

Dica publicada em C/C++ / Miscelânea
Ricardo Rodrigues Lucca jllucca
Hits: 6.576 Categoria: C/C++ Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar

Verificar conversão de tipo em C/C++

Pessoal,

Por muito tempo utilizei a função *atoi* no C para converter uma string em número. Me deparei recentemente com a necessidade de entender números hexadecimais nessas strings, por ventura, ao reler a página de manual do *atoi* e ler a página do *strtoul* e *strtod* me deparei exatamente com o que precisava!

Além disso, a verificação de erro é muito melhor que o *atoi*, que se desse problema ou fosse informado zero tinha que se ter o mesmo comportamento. O exemplo segue em código C++:

int
main(void) {
   char value[] = "0xDEAD";
   char *end = NULL;
   double i;
                
   i = strtod(value, &end);

   if (i == std::numeric_limits<double>::infinity()
      || i == - std::numeric_limits<double>::infinity()
      || i == std::numeric_limits<double>::quiet_NaN()) {
         std::string err("Value `");
         err += key + "' not supported";
         throw logic_error(err);
   }

   if (*end != '
Pessoal,

Por muito tempo utilizei a função *atoi* no C para converter uma string em número. Me deparei recentemente com a necessidade de entender números hexadecimais nessas strings, por ventura, ao reler a página de manual do *atoi* e ler a página do *strtoul* e *strtod* me deparei exatamente com o que precisava!

Além disso, a verificação de erro é muito melhor que o *atoi*, que se desse problema ou fosse informado zero tinha que se ter o mesmo comportamento. O exemplo segue em código C++:

int
main(void) {
   char value[] = "0xDEAD";
   char *end = NULL;
   double i;
                
   i = strtod(value, &end);

   if (i == std::numeric_limits<double>::infinity()
      || i == - std::numeric_limits<double>::infinity()
      || i == std::numeric_limits<double>::quiet_NaN()) {
         std::string err("Value `");
         err += key + "' not supported";
         throw logic_error(err);
   }

   if (*end != '
Pessoal,

Por muito tempo utilizei a função *atoi* no C para converter uma string em número. Me deparei recentemente com a necessidade de entender números hexadecimais nessas strings, por ventura, ao reler a página de manual do *atoi* e ler a página do *strtoul* e *strtod* me deparei exatamente com o que precisava!

Além disso, a verificação de erro é muito melhor que o *atoi*, que se desse problema ou fosse informado zero tinha que se ter o mesmo comportamento. O exemplo segue em código C++:

int
main(void) {
   char value[] = "0xDEAD";
   char *end = NULL;
   double i;
                
   i = strtod(value, &end);

   if (i == std::numeric_limits<double>::infinity()
      || i == - std::numeric_limits<double>::infinity()
      || i == std::numeric_limits<double>::quiet_NaN()) {
         std::string err("Value `");
         err += key + "' not supported";
         throw logic_error(err);
   }

   if (*end != '{TEXTO}') {
      std::string err("Value `");
      err += key + "' is not not numeric at " + end;
      throw logic_error(err);
   }

   return 0;
}

Os includes do teste são stdexcept e climits. Sem .h como é costume do C++.

[]'s

') {
      std::string err("Value `");
      err += key + "' is not not numeric at " + end;
      throw logic_error(err);
   }

   return 0;
}

Os includes do teste são stdexcept e climits. Sem .h como é costume do C++.

[]'s

') {
      std::string err("Value `");
      err += key + "' is not not numeric at " + end;
      throw logic_error(err);
   }

   return 0;
}

Os includes do teste são stdexcept e climits. Sem .h como é costume do C++.

[]'s

Tabela ASCII

Descompilando programas

VIM executando programas

Número por extenso

WorkShop: Instalação do Red Hat Linux

Corrigindo o bug "file format not recognized" após atualizar glib2

Apostila de ncurses bem completa

C/C++ no modo Hard

Usando "sscanf" para Dividir String com Delimitadores em C

Cross Compiling - compilando seus programas C/C++ para Windows usando seu Linux

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.