Ir ao conteúdo

Trabalhar com código ASCII


orlando.ls

Posts recomendados

Postado

preciso fazer um programa: voce digita uma string e sai o equivalente no código ascii e o inverso também, você digita o código ascii e sai a string equivalente!!

ja tentei d+ e nao consigo! ainda sou iniciante em C :confused:

alguem ajuda?

  • Membro VIP
Postado

Olá amigo. Você já tentou alguma coisa? Tente fazer o seguinte:

char a = 'a';
printf("%d\n", a);

Você verá que na tela irá aparecer "97". Então você já encontrou uma forma de, a partir do caracter, chegar no valor ascii.

Agora para fazer o caminho contrário tente o seguinte:

char a = 97;
printf("%c\n", a);

Você verá que na tela irá aparecer "a". Ou seja, com uma simples alteração do tipo de dado a ser impresso(informando com o %d ou %c) você obtém o valor ASCII do caracter ou o caracter referente a um dado valor ASCII.

Você já sabe como irá elaborar a lógica do programa com essas ferramentas em mão? Caso ainda reste alguma dúvida é só perguntar.

Abraço.

Postado

esqueci de dizer q nao pode usar o printf, precisa transformar a string digitada e depois usar o "puts"

eu sei fazer isso q você fez, só nao especifiquei o modo q o código deveria ser feito, isso ae só serve pra um carácter c eu digitar uma palavra grande num serve, na verdade da pra fazer algo parecido para palavras grandes mas na verdade o *** do professor disse q quer q seja feito usando o "puts" e isso apos transformar a string em ascii.. antes de imprimir valeu pela ajuda, to f*didu :(

  • Membro VIP
Postado

Hum, entendi. No caso pra alimentar a string você pode simplesmente ir posição a posição no array de char e indicar na posição atual o valor numérico ASCII. Por exemplo:

#include <stdio.h>
#include <stdlib.h>

int main ()
{

int tamanhoArray = 5, i;
char string [tamanhoArray];

for(i = 0; i < tamanhoArray-1; i++){

string[i] = 65+i;//65 = A 66 = B 67 = C 68 = E

}

puts(string);
system("pause");

}

Isso vai imprimir: ABCD

Mas antes de prosseguir, o professor disse se não poderia ser utilizada alguma biblioteca? Há mais alguma restrição?

Abraço.

Postado

bom na verdade como ainda estamos começando a aprender C, ele só ensinou o básico, nem funçoes ele começou, ate agora ele ensinou --> os laços, gets,puts,scanf,printf,if e uns símbolos básicos, ele disse também q o programa deve ser feito da seguinta forma: o usuário digita a string( usa-se o "gets") e após algo q eu nao sei fazer, você a imprime (usa-se o "puts") modificada para o código ascii e o contrário tb ou seja digita o código ascii e sai a string, ele tb falou q era bom fazer uma programa pra cada "coisa", porque as duas "coisas" e um só seria mais difícil pra gente.

valeu pela ajuda cara!! :D

obs: ele tb ensinou como declarar string, ainda nao começou arrays e foi só isso.

Postado

bom na verdade como ainda estamos começando a aprender C, nosso professor só ensinou o básico, nem funçoes ele começou, ate agora ele ensinou --> os laços, gets,puts,scanf,printf,if e uns símbolos básicos, ele disse também q o programa deve ser feito da seguinta forma: o usuário digita a string( usa-se o "gets") e após algo q eu nao sei fazer, você a imprime (usa-se o "puts") modificada para o código ascii e o contrário tb ou seja digita o código ascii e sai a string, ele tb falou q era bom fazer uma programa pra cada "coisa", porque as duas "coisas" e um só seria mais difícil pra gente.

nao foi resolvido..

  • Membro VIP
Postado

Hum amigo, entendo. No caso pra obter os inputs você tem que usar o gets() e pra imprimir o puts().

Para obter o código ASCII e transformar numa string eu pensei em algo que pode dar certo: você obtém o input do usuário, que ficará armazenado num array de char onde cada posição é um número, então usa a seguinte lógica: se o número na posição i do array for 1, você pega esse 1 e os dois números seguintes(isso porque na tabela ascii os caracteres imprimíveis vão de 32 a 126), já se nessa posição houver outro número, pegue esse número e o outro seguinte.

Então por exemplo, se o for digitado: 999711597(casa)

Você irá obter: 99 97 115 97

E cada um desses números deve ser armazenados num array de char, eles então serão automaticamente convertidos para os caracteres ascii equivalentes.

Será necessário que você elabore uma lógica para percorrer o primeiro array de char e ir "criando" os inteiros a serem representados(lembre: caso o usuário digite 999711597, cada número irá ocupar uma posição no array de char que foi utilizado para o gets, então você deverá pegar a posição 0 do array, "juntar" com a posição 1, formar o número 99 e depois colocá-lo no array de char).

Pode ser um pouco complicado, mas tente aí e veja se consegue alguma coisa. É possível também que já hajam funções de C que realizem esta conversão(eu não conheço).

Você entendeu o que eu quis dizer? Se ficou complicado é só avisar que explico de novo. E vale lembrar que isso é uma forma para resolver o problema que eu pensei aqui, ainda não implementei ou testei, então pode ser que não seja tão eficiente dessa forma...:wacko: Mas dê uma olhadinha...;)

Postado

valeu mesmo pela ajuda cara! eu entendi o que você quis dizer.. só nao consigui escrever devido a minha inexperiencia em C :confused:!, só aprendi um pouco de pascal e foi bem rápido.. eu tentei fazer o programa que transforma a string para o código ascii, mas na hora de imprimir além dele imprimir o código ascii equivalente a string, ele tb imprime a própria string digitada ao lado do código, está ae o que fiz:

#include <stdio.h>
int ascii (char orl){
printf ("%d",orl);
return(0);}
int main (){
char s[100];
gets(s);
int i;
for (i=0;s[i]!='\0';i++)
ascii (s[i]);
puts(s);
return(0);}

e neste outro (ascii para string) eu digito o código ascii e sai o símbolo equivalente ao código inteiro ascii digitado e nao somente cada letra do alfabeto :confused:

#include <stdio.h>
int ascii (int orl){
printf ("%c",orl);
return(0);}
int main (){
char s[100];
scanf("%d",&s);
int i;
for (i=0;s[i]!='\0';i++)
ascii (s[i]);
puts(s);
return(0);}

  • Membro VIP
Postado

Eu vou te dar uma colher de chá.:P Aí segue o código funcionando para o problema de "traduzir" de ascii para caracteres.


#include<stdlib.h>

int main(){

char string[20];//A string que será recebida
gets(string);//Obtendo a string...

//Contadores que serão utilizado mais pra frente nos loops
int i = 0;
int j = 0;

//Este inteiro será utilizado para marcar a última posição do array de char "traduzido"
int ultimaPosicao = 0;

//Array que será utilizado para trechos do código entre 32 e 99
char doisCaracteres[2];
//Array que será utlizado para trechos do código entre 100 e 126
char tresCaracteres[3];
//O array final no qual os caracteres serão "traduzidos" do código ASCII para char
//Escolhi o tamanho 11 porque no pior caso todos os caracteres da string de tamanho
//20 formarão sequências de apenas dois números, ou seja, um total de 10 letras,
//me adicionamos mais um espaço para o caracter '\0'.
char ascii[11];

//Percorrendo a string obtida
while(i < strlen(string)){

//Caso o caracter na posição i seja 1, pega-se ele e os 2 seguintes
if(string[i] == '1'){

//Os três inteiros(que ainda são chars) são inseridos no array de tamanho 3
for(j = 0; j < 3; j++){

tresCaracteres[j] = string[i];
i++;//E vale lembrar de incrementar para o loop externo

}

//É utilizada a função ATOI, que converte um array de char em um inteiro
//E este inteiro é inserido na última posição do array de char, no qual o
//inteiro que representa o código ascii será "traduzido" para o caracter
//equivalente
ascii[ultimaPosicao] = atoi(tresCaracteres);
//É incrimentado o inteiro que representa a última posição do array de char
ultimaPosicao++;

//A mesma lógica vale para o caso de dois caracteres
}else{

for(j = 0; j < 2; j++){

doisCaracteres[j] = string[i];
i++;

}

ascii[ultimaPosicao] = atoi(doisCaracteres);
ultimaPosicao++;

}

}

//Lembrando de incluir o caracter '\0', o qual representa
//o fim da string. Leia sobre a função puts para entender
//melhor isso.
ascii[ultimaPosicao] = '\0';

//E finalmente, PUTS! :D
puts(ascii);

return 0;

}
#include<stdio.h>

Pronto, dê uma olhada e veja se você entende. Agora tente fazer o caminho contrário baseado na lógica que eu mostrei aí.;)

Abraço.

  • Membro VIP
Postado

Mas diz aí qual foi o jeito que seu professor recomendou. Sempre é bom ter outras visões sobre como resolver um dado problema.^_^

Abraço.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...