This might be ASCII or EBCDIC or something else local to a specific hardware implementation.
https://en.wikipedia.org/wiki/EBCDIC
So, maybe 0x20, maybe 0x40, maybe something else.
At least you know that '0', '1', .., ''9' are contiguous.
There are a huge number of assumptions in that simple chain of events, and if any of them are wrong you get a different answer.
The wrapping rule here is that signed integer overflow is UB.
Early C compiler projects (eg: The Hendrix Small-C of ~1982) would get patched by some to support the full C language and extended to cross compile to and from whatever machines were about at the time, System/360's, VAX, PDP's, early PC's, BBC micros, etc.
It wasn't always the case that char encoding passed on by default, there was always the option to insert a trans table whether compiling or dealing with data stored in not native form (similar to data in big end V little end).