El tipo de variable char siempre genera confusiones. Tengo una manual que baje de internet que lo define asi:
"Es el tipo básico alfanumerico, es decir que puede contener un caracter, un digito numerico o un signo de puntuacion. Desde el punto de vista del computador, todos estos valores son caracteres. En C este tipo de variable siempre contiene un único carácter del codigo ASCII. El tamaño de memoria es de 1 byte". Muy complicado verdad, pero en realidad es extremadamente sencillo.
El punto es que una variable char generalmente se declara para almacenar un valor del codigo ASCII en donde por ejemplo el numero 49 representa al numero 1. Tendrias que revisar una tabla de caracters ASCII para aprender la codificacion. Esto significa que si tienes algo asi
char a="1"
en realidad el valor contenido en la variable "a" es el numero 48 (ó 0x31 en hexa ó 00110001 en binario) claro que el compilador no lo interpreta como numero sino como caracter.
Si quieres tratar el valor como numero tendrias que restarle el ASCII que representa al 0, que es 48 (0x30 ó 00110000 ) por ejemplo:
char a=0x31; // que es lo mismo que decir a="1" ó a=49
int b; //
b=a-0x30; // si realizas la compleja operacion 49-48 obtendras 1
// y el compilador lo interpretara como un valor numerico
// que se puede operar matematicamente.
Que suceder si recibes una cadena de caracteres que reprenta un numero por ejemplo 564 en ASCII (char[3]="564"
![Giño Giño]()
tendrias que cambiarlo a un numero decimal para poder operarlo recurriendoa: Generar una rutina que lo haga o utilizar alguna funcion C que se encuentra en las librerias del Compilador.
Salud2.