Diversas vezes precisamos converter nossos dados para manipulá-los da maneira desejada e até mesmo para dificultar exibição quando necessário.
Nós fizemos algumas dessas conversões do zero no Curso de C++ para Iniciantes sem usar bibliotecas e isso é interessante por fins didáticos para entendermos o que na verdade essas bibliotecas fazem.
Mas, para fins de desenvolvimento é bom já termos algo pronto para agilizarmos, então criei um único arquivo convert.hpp
com uma Union que possui as funções-membro para isso.
Eu realmente não gosto de encher o código de comentários, até porque programadores sabem ler o código da linguagem de programação que ele está familiarizado.
No entanto, vou informar algumas coisas no código para ficar mais fácil a leitura e caso você queira incrementar alguma coisa, ficará mais fácil, são elas:
union
em vez de class
ou struct
por motivos de desempenho como vimos nesse artigo;static
para não precisarmos de instância e utilizar mais facilmente somente com o operador ::
;namespace
, pois a própria static
já permitirá um escopo;ascii_to_bin()
adicionei essa verificação abaixo só para separarmos a saída em 8 bits, exemplo: 01010101 01010101
, ou seja, por um espaço no meio:bin_to_hex()
adicionei o iterador bin.erase( std::remove( bin.begin() , bin.end(), ' ') , bin.end() );
para removermos o espaço em branco dos bits, se houver, pois em bin_to_ascii()
as converões são diferentes;std::bitset<16>
;ascii_to_hex
, reutiliza as outras funções-membro, não precisar reescrever tudo.O código completo é esse:
convert.hpp
Para utilizar, basta incluir esse arquivo e chamar as funções-membro estáticas da union, exemplo: conv::funcao_membro(param);
:
main.cpp
Possível e provável saída:
Se quiser adicionar mais conversões, por exemplo, para: decimal e octal, será um bom exercício. Não pus no GitHub porque é só um arquivo básico! 😃