[Solucionado] Duda Serial.read() - '0'

Hola compañeros.

Mirando un vídeo de youtube video sobre como mandar datos a arduino desde el monitor serie. Me ha surgido una duda y no he encontrado respuesta.

El usuario convierte AScII a decimal a través de la siguiente instrucción:

int valor = Serial.read() - '0';

Lo que no acabo de entender es como 'resta' el valor que entra desde el monitor serie, a una cadena de texto ('0') y le devuelve el mismo numero que introduce.

Un saludo, muchas gracias.

Si solo ingresas caracteres numéricos como '0', '1', '2'.....'8','9' mira que fácil resulta esto:
Supon que ingresas '2'
restas '2'-'0'=2 en enteros
Por eso funciona!!

Explicando un poco más:

Ascii de '0' -> 48
Ascii de '1' -> 49
. . .
Ascii de '9' -> 57

'9' - '0' = 57 - 48 = 9

Muchas gracias a ambos. Buena explicación note.

Pensaba que al crear una variable:

Char valores = '0';

El valor de valores seria 0 no el valor que tiene en ASCII 48. Pensaba que char era "igual" a String pero con un solo carácter.

Muchas gracias compañeros.