Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com conversor de binários


Saint Kidd

Pergunta

Olá,

estou criando um programa em que o usuário escolha se ele quer fazer uma conversão de um string para binário ou de binário para strings.

Por exemplo:

Digite uma frase: Conversor binário

Saída em binário: 00100100 00100110 10100101 00010010 (É só um exemplo)

Digite a sentença binária: 00100100 00100110 10100101 00010010 (É só um exemplo)

Saída: Conversor binário

Pra passar de string para binário eu já consegui fazer, mas estou tendo problemas para passar de binário para string.

Alguém sabe como eu posso fazer isso?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Você pode tentar fazer o inverso do processo que você usou na conversão de string para binário, fazendo com que o programa imprima o correspondente do código binário em forma de string.

Link para o comentário
Compartilhar em outros sites

  • 0

O problema é que pra inverter de string para binário, eu utilizei um for para varrer cada caractere e imprimir sua respectiva forma binária. Mas isso não funciona para fazer a volta, pois um caractere seria, por exemplo, 00100000 e o for iria varrer número por número, e não o byte inteiro.

Link para o comentário
Compartilhar em outros sites

  • 0
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define BUFSZ 256

char *str2bin(char *str)
{
  int chLen = sizeof(char)*8, strLen = strlen(str), binLen = chLen*strlen(str) + 1;
  char *bin = (char *)malloc(binLen), *binPtr, *strEnd = str+strLen, *chBase = bin;

  for (; str < strEnd; str++) {
    char ch = *str;
    binPtr = chBase + chLen - 1;
    for (; binPtr >= chBase; binPtr--) {
      *binPtr = (ch & 1) + '0';
      ch = ch >> 1;
    }
    chBase += chLen;
  }

  binPtr[9] = '';
  return bin;
}

char *bin2str(char *bin)
{
  int chLen = sizeof(char)*8, binLen = strlen(bin), strLen = sizeof(char)*binLen/8;
  char *str = (char *)malloc(strLen+1), *strPtr = str, *binPtr, *strEnd = str+strLen, *chBase = bin;

  for (; strPtr < strEnd; strPtr++) {
    char p = 1;
    *strPtr = 0;
    binPtr = chBase + chLen - 1;
    for (; binPtr >= chBase; binPtr--) {
      *strPtr += p*(*binPtr-'0');
      p = p << 1;
    }
    chBase += chLen;
  }

  strPtr[8] = '';
  return str;
}

int main(void)
{
  char input[BUFSZ];
  printf("String? ");
  fgets(input, BUFSZ, stdin);
  printf("BIN= %s\n", str2bin(input));
  printf("STR= %s\n", bin2str(str2bin(input)));
  return 0;
}

01000001011101001100001110101001001000000110110101100001011010010111001100100001

Editado por == Douplus ==
Link para o comentário
Compartilhar em outros sites

  • 0
Que engraçado... o caractere nulo não aparece no post! Algum admin pode ver por que não é possível colocar <barra invertida + 0> ?

Pois é, Douplus... Sempre foi assim, nunca foi descoberto o por quê.

Parece ser uma limitação do IPB, uma pena, já me atrapalhou diversas vezes também.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
Que engraçado... o caractere nulo não aparece no post! Algum admin pode ver por que não é possível colocar <barra invertida + 0> ?

Pois é, Douplus... Sempre foi assim, nunca foi descoberto o por quê.

Parece ser uma limitação do IPB, uma pena, já me atrapalhou diversas vezes também.

Abraços!

Sou membro do fórum a mais de sete anos e nunca tinha reparado nisso!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...