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

Publicado por Ricardo Rodrigues Lucca em 05/03/2010

[ Hits: 5.971 ]

Blog: http://aventurasdeumdevop.blogspot.com.br/

 


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 != '{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

Outras dicas deste autor

Documentação

Tabela ASCII

Vim Colorido

Achando comandos no console com "!" e "?"

Ligando o NumLock na abertura do KDE

Leitura recomendada

STDPRN para GCC

Usando funções do sistema em C com "system"

Baixe de graça alguns livros do O'Reilly

Split de String em C++

Usando "sscanf" para Dividir String com Delimitadores em C

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts