Túnel do Tempo: a função itoa()

Em uma discussão no fórum de Programação em C e C++ do Viva o Linux, seu proponente perguntava acerca da função itoa(), desejoso de compreender seu funcionamento. Julguei interessante transportá-la, com algumas melhorias, para este espaço, até porque aqui posso fazer algo que não posso fazer naquele fórum, que é dar um exemplo explícito da implementação com código fonte em C.

[ Hits: 16.279 ]

Por: Paulo em 14/06/2017 | Blog: http://unixntools.blogspot.com.br/


Conclusão



É muito útil lembrar do tempo de escola. Conhecimentos do ensino fundamental são essenciais para fazer conversões entre números e numerais, em diferentes sistemas de numeração.

Mesmo que se esteja usando um compilador que traga uma implementação compatível com a itoa() do antigo Borland Tubo C, essa função deve ser evitada, tanto por causa de seus problemas e inconsistência, quanto pelo fato de não ser uma função padronizada.

Raras vezes se usam bases de conversão diferentes de 2, 8, 10 e 16. Para as três últimas, tanto o C quanto o C++ possuem funções de conversão nativas. Para C++, a conversão para binário pode ser feita através de conversão de inteiro para std::bitset, e depois dessa para std::string. Sendo possível, é melhor usar uma das funções padronizadas.

Nas funções acima, certamente há espaço para otimizações de desempenho. Contudo, o fato de trabalhar com qualquer valor de base impede algumas otimizações específicas que podem ser feitas para uma base fixa e conhecida, principalmente se for uma base que seja uma potência de dois. Algumas dessas otimizações permitem substituir a operação de divisão por multiplicações, que são mais rápidas de realizar, ou por deslocamentos de bits, que são ainda mais rápidos.

Otimizações de uso de memória também podem ser necessárias em algumas aplicações, principalmente no caso de sistemas embarcados.

Apesar disso, acredito ser interessante mostrar as implementações acima, mesmo que seja apenas para restaurar conhecimento que ficou lá num canto da memória.

Página anterior    

Páginas do artigo
   1. Apresentação do problema
   2. A implementação da itoa() do antigo Turbo C (e seus problemas)
   3. Alguns conceitos para a implementação da função
   4. Algoritmo para formação do numeral a partir do valor do número
   5. "my_itoa()", uma implementação segura de conversão de número em string
   6. Variações de "my_itoa()"
   7. Conclusão
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Programando em Qt

Criação e uso de um interpretador de script BrainFuck em C++

Escrevendo o caos em C

C - Include e Makefile

Ponteiros void na linguagem C

  
Comentários
[1] Comentário enviado por uNclear em 19/06/2017 - 01:55h

ótimo artigo, quando tiver tempo vou fazer alguns testes

[2] Comentário enviado por uilianries em 19/06/2017 - 11:23h

Muito bem detalhado. Parabéns pelo conteúdo, Paulo.

[3] Comentário enviado por Nick-us em 01/03/2019 - 20:08h

Valeu a pena ler e guardar! informação nunca é demais!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts