Título: Imprimindo em Binário
Linguagem: C/C++
S.O.: DOS / Windows
Autor(es): Wenderson Teixeira
Você já quis imprimir números no formato binário em C?
Então já deve ter percebido que, apesar de ter formatação para Hex e Octal, não há para Binário, uma solução simples seria utilizar a função itoa do compilador Borland, passando como parâmetros o número a ser convertido, a string de saída e 2 como a base, o problema é que isto pode não ficar muito claro, a solução então pode ser criar uma macro ou função que encapsula esta transformação, mas o pior mesmo é que itoa não faz parte do padrão ANSI C e muitos compiladores não a implementam, assim, para solucionar este problema, vamos implementar uma função que converte um número inteiro em uma string no formato binário, pronto para impressão, e aproveitando o embalo, vamos fazer também, uma rotina que faz o contrário, ou seja, converte uma string em formato binário de volta para um inteiro.
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#if (__BORLANDC__ <= 0x460) || !defined(__cplusplus)
typedef enum { false, true } bool;
#endif
/* IntToBinStr *************************************************************/
/* Descricao: */
/* Funcao que converte um número p/ uma string no formato binario */
/* */
/* Entrada: */
/* char *str - String que ira receber o numero convertido */
/* int Num - Numero a ser convertido */
/* */
/* Retorno: */
/* Retorna str */
/***************************************************************************/
char *IntToBinStr(char *str, int Num)
{
unsigned int n = (unsigned int)Num;
int c;
bool bAppend = false;
if(!Num)
{
strcpy(str, "0");
return str;
}
str[0] = '\0';
for(c = 0; c < (sizeof(int) * 8); c++)
{
strcat(str, (n & 0x8000) ? (bAppend = true, "1") : (bAppend ? "0" : ""));
n <<= 1;
}
return str;
}
/* BinStrToInt *************************************************************/
/* Descricao: */
/* Funcao que converte uma string no formato binario p/ um número */
/* */
/* Entrada: */
/* char *str - String que sera convertida */
/* */
/* Retorno: */
/* Retorna o número convertido */
/***************************************************************************/
int BinStrToInt(char *str)
{
int c, n;
for(c = n = 0; c < strlen(str); c++)
{
n <<= 1;
n |= str[c] == '1' ? 1 : 0;
}
return n;
}
void main()
{
char strBin[sizeof(int) * 8 + 1];
int c;
printf("--------------------------\n"
"| Hex | Oct | Bin | Dec |\n"
"--------------------------\n");
for(c = 0; c < 16; c++)
{
printf("| %02X ", c);
printf("| %2o ", c);
printf("| %4s ", IntToBinStr(strBin, c));
printf("| %2d |\n", BinStrToInt(strBin));
}
printf("--------------------------\n");
}