Char no se está convirtiendo a int

Por alguna razón, mi programa C se niega a convertir elementos de argv en ints, y no puedo entender por qué.

int main(int argc, char *argv[])
{

    fprintf(stdout, "%s\n", argv[1]);

    //Make conversions to int
    int bufferquesize = (int)argv[1] - '0';

    fprintf(stdout, "%d\n", bufferquesize);
}

Y esta es la salida cuando se ejecuta ./test 50:

50

-1076276207

He intentado eliminar (int), arrojando a * y an & between (int) y argv [1]: el primero me dio un 5 pero no un 50, pero el segundo me dio una salida similar a la anterior. Eliminar la operación - '0' no ayuda mucho. También intenté hacer un char first = argv [1] y usar primero para la conversión, y esto curiosamente me dio un 17 independientemente de la entrada.

Estoy extremadamente confundido. ¿Que esta pasando

Respuestas a la pregunta(8)

Su respuesta a la pregunta